一、20. 有效的括号
对题目的看法:希望用栈进行求解,与卡哥一样。代码如下:
class Solution:
def isValid(self, s: str) -> bool:
stack= []
for i in s:
if i=='(':
stack.append(")")
elif i =='[':
stack.append("]")
elif i =='{':
stack.append("}")
elif not stack or stack[-1]!= i:
return False
else:
stack.pop()
return True if not stack else False
结果:
二、1047. 删除字符串中的所有相邻重复项
对题目的看法:使用栈,当存入相同时弹出两个。代码如下:
class Solution:
def removeDuplicates(self, s: str) -> str:
strack =[]
for i in s:
if strack and i==strack[-1]:
strack.pop()
else:
strack.append(i)
return "".join(strack)
结果:
三、150. 逆波兰表达式求值
对题目的看法:看起来像后序遍历,用栈在存储遇到符号时弹出,代码如下:
class Solution:
# op_map = {'+':add }
def evalRPN(self, tokens: List[str]) -> int:
stack = []
for i in tokens:
if i not in {"+","-","*","/"}:
stack.append(i)
else:
op1,op2 = stack.pop(),stack.pop()
stack.append(int(eval(f'{op2} {i} {op1}')))
return int(stack.pop())
运行结果: