20. 有效的括号
有效的括号
这里使用栈的思想相当于对称的括号,有匹配到的就出栈,按照一定的顺序。
代码:
class Solution:
def isValid(self, s: str) -> bool:
stack=[]
if len(s)%2!=0:
return False
for i in range(len(s)):
if s[i]=='(':stack.append(')')
elif s[i] == '[': stack.append(']')
elif s[i] == '{': stack.append('}')
elif len(stack)==0 or stack[-1]!=s[i]:
return False
else: stack.pop()
return True if len(stack)==0 else False
1047. 删除字符串中的所有相邻重复项
删除字符串中的所有相邻重复项
这题一开始没有思路,然后看了carl的视频,自己找到了思路。在python中数组就是相当于栈。
s="abbaca"
def removeDuplicates( s: str) -> str:
stack=[]
for ch in s:
if len(stack)==0:
stack.append(ch)
elif ch != stack[-1]:
stack.append(ch)
else:
stack.pop()
return str(''.join(stack))
print(removeDuplicates(s))
每次插入的值在尾部。
150. 逆波兰表达式求值
题目链接:逆波兰表达式求值
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]=='/':
nums2 = stack.pop()
nums1=stack.pop()
if tokens[i]=='+' : stack.append(nums1+nums2)
elif tokens[i]=='-' : stack.append(nums1-nums2)
elif tokens[i] == '*': stack.append(nums1 * nums2)
elif tokens[i] == '/': stack.append(int(nums1 / nums2))
else:
stack.append(int(tokens[i]))
return stack[-1]
这个不看讲解根本写不出来。
int是int()函数是“向0取整”,取整方向总是让结果比小数的绝对值更小
参考文章:python取整