20. 有效的括号
class Solution:
def isValid(self, s: str) -> bool:
stack=[]
for item in s:
if item == "(":
stack.append(')')
elif item == '[':
stack.append(']')
elif item == '{':
stack.append('}')
elif not stack or stack[-1] != item:
return False #记得判断栈是否为空
else:
stack.pop()
return True if not stack else False
1047. 删除字符串中的所有相邻重复项
class Solution:
def removeDuplicates(self, s: str) -> str:
res = list()
for item in s:
if res and res[-1] == item:
res.pop()
else:
res.append(item)
return "".join(res)
######不用栈的方法
class Solution:
def removeDuplicates(self, s: str) -> str:
#用双指针模拟栈
res = list(s)
slow = fast = 0
length = len(res)
while fast<length:
res[slow] = res[fast]
if slow >0 and res[slow] == res[slow-1]:
slow -= 1
else:
slow += 1
fast += 1
return "".join(res[0:slow])
150. 逆波兰表达式求值
#from operator import add, sub, mul
class Solution:
#op_map = {'+':add,'-':sub,'*':mul,'/': lambda x, y: int(x/y)}
def evalRPN(self, tokens: List[str]) -> int:
#stack = []
#for token in tokens:
# if token not in {'+','-','*','/'}:
# stack.append(int(token))
# else:
# op2 = stack.pop()
# op1 = stack.pop()
# stack.append(self.op_map[token](op1,op2))
# #第一个出来的在运算符后面
#return stack.pop()
stack = []
for item in tokens:
if item not in {'+','-','*','/'}:
stack.append(int(item))
else:
op2 = stack.pop()
op1 = stack.pop()
stack.append(int(eval(f'{op1} {item} {op2}')))
return stack.pop()