1.有效的括号
给定一个只包括
'('
,')'
,'{'
,'}'
,'['
,']'
的字符串s
,判断字符串是否有效。有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
匹配括号一共有3种情况:
1. (())} 右边多了一个右括号
2. (() 左边多了一个左括号
3. ((}) 左右括号不匹配
def isVaild(s):
if len(s)%2!=0: # 两个一对,数量不为偶数时肯定不匹配
return False
stack=[]
for i in s:
if i=="(":
stack.append(")")
elif i=="{":
stack.append("}")
elif i=="[":
stack.append("]")
elif not stack or stack!= i: # 这里判断右括号匹配时,如果栈为空了肯定不匹配,同时两者 不#相等也不匹配
return False
else:
stack.pop()
if not stack:
return False
else:
return True
删除字符串中的所有相邻项
给出由小写字母组成的字符串
S
,重复项删除操作会选择两个相邻且相同的字母,并删除它们。在 S 上反复执行重复项删除操作,直到无法继续删除。
在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。
输入:"abbaca" 输出:"ca" 解释: 例如,在 "abbaca" 中,我们可以删除 "bb" 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。之后我们得到字符串 "aaca",其中又只有 "aa" 可以执行重复项删除操作,所以最后的字符串为 "ca"。
def removeDuplicates(self, s: str) -> str:
stack=[]
for i in s:
if stack and stack[-1]==i:
stack.pop()
else:
stack.append(i)
return "".join(stack)
逆波兰表达式求值
给你一个字符串数组
tokens
,表示一个根据 逆波兰表示法 表示的算术表达式。请你计算该表达式。返回一个表示表达式值的整数。
注意:
- 有效的算符为
'+'
、'-'
、'*'
和'/'
。- 每个操作数(运算对象)都可以是一个整数或者另一个表达式。
- 两个整数之间的除法总是 向零截断 。
- 表达式中不含除零运算。
- 输入是一个根据逆波兰表示法表示的算术表达式。
- 答案及所有中间计算结果可以用 32 位 整数表示。
示例 1:
输入:tokens = ["2","1","+","3","*"] 输出:9 解释:该算式转化为常见的中缀算术表达式为:((2 + 1) * 3) = 9示例 2:
输入:tokens = ["4","13","5","/","+"] 输出:6 解释:该算式转化为常见的中缀算术表达式为:(4 + (13 / 5)) = 6
class Solution:
def evalRPN(self, tokens: List[str]) -> int:
stack = []
for i in range(len(tokens)):
if tokens[i] == '+' or tokens[i] == '/' or tokens[i] == '*' or tokens[i] == '-':
a = stack.pop()
b = stack.pop()
if tokens[i] == '+':
stack.append(int(float(b) + float(a)))
if tokens[i] == '-':
stack.append(int(float(b) - float(a)))
if tokens[i] == '*':
stack.append(int(float(b) * float(a)))
if tokens[i] == '/':
stack.append(int(float(b) / float(a)))
else:
stack.append(tokens[i])
return int(stack[-1])