20. 有效的括号
完全是一个暴力解。注意判断栈为空的条件
class Solution:
def isValid(self, s: str) -> bool:
stack = []
left = ['(', '[','{']
if s[0] not in left:
return False
for i in s:
if i in left:
stack.append(i)
elif i == ')':
if stack and stack[-1] == '(':#注意提前判断栈是否为空
stack.pop()
else:
return False
elif i == ']':
if stack and stack[-1] == '[':
stack.pop()
else:
return False
elif i == '}':
if stack and stack[-1] == '{':
stack.pop()
else:
return False
return True if len(stack)==0 else False
1047. 删除字符串中的所有相邻重复项
暴力解+1
和前一个字母相同就消除pop,不同就append
class Solution:
def removeDuplicates(self, s: str) -> str:
stack = []
for i in s:
if not stack :
stack.append(i)
else:
if i == stack[-1]:
stack.pop()
else:
stack.append(i)
return ''.join(stack)
150. 逆波兰表达式求值
class Solution:
def evalRPN(self, tokens: List[str]) -> int:
stack = []
cal = ['+','-','*','/']
for i in tokens:
if i not in cal:
stack.append(int(i))
if i == '+':
a = stack.pop()
b = stack.pop()
ans = a+b
stack.append(ans)
#print(ans)
if i == '-':
a = stack.pop()
b = stack.pop()
ans = b-a #先出来的数灾后
stack.append(ans)
#print(ans)
if i == '*':
a = stack.pop()
b = stack.pop()
ans = a*b
stack.append(ans)
#print(ans)
if i == '/':
a = stack.pop()
b = stack.pop()
ans = int(b/a) #向0截断,不简单是//除法
stack.append(ans)
#print(ans)
return stack.pop()
和卡哥对比,很虐的代码长度
卡哥主要是用一个字典+内置运算函数代替了我的系列if判断
from operator import add, sub, mul#加减乘
op_map = {'+': add, '-': sub, '*': mul, '/': lambda x, y: int(x / y)}
stack.append(self.op_map[token](op1, op2))