20. 有效的括号
题目链接:力扣
思路:栈
栈适合做对称匹配类的题目。
总共三种情况,①左括号多了②右括号多了③左右括号类型不匹配
遍历字符串,遇到左括号将其入栈,遇到右括号看其是否与栈顶左括号匹配,不匹配的话false(③),或此时栈顶为空false(②)。
遍历完成后栈未空false(①)。
实际写代码时,遇到左括号将右括号入栈,便于匹配。
# 遇到左括号把右括号入栈
class Solution:
def isValid(self, s: str) -> bool:
if len(s)%2 != 0:
return False
stack = [] # 栈
for i in range(len(s)):
if s[i] == '(':
stack.append(')')
print("(")
elif s[i] == '{':
stack.append('}')
print("{")
elif s[i] == '[':
stack.append(']')
print("]")
elif stack == [] or stack[-1] != s[i]:
return False
else:
stack.pop()
return stack == []
1047. 有效的括号(a)
题目链接:力扣
思路:栈
class Solution:
def removeDuplicates(self, s: str) -> str:
st = []
for i in s:
if st != [] and st[-1] == i:
st.pop()
else:
st.append(i)
return ''.join(st)
1047. 有效的括号(a)
题目链接:力扣
思路:栈
遍历tokens,遇到数字压入栈,遇到运算符,从栈中拿出两个数字与该运算符运算,再把运算结果压入栈。
注意各编程语言中对除法以及字符串转换的各种操作。
class Solution:
def evalRPN(self, tokens: List[str]) -> int:
st = []
t = ['+', '-', '*', '/']
for i in tokens:
if i not in t:
st.append(i)
elif i == t[0]:
a = int(st.pop())
b = int(st.pop())
st.append(a+b)
elif i == t[1]:
a = int(st.pop())
b = int(st.pop())
st.append(b-a)
elif i == t[2]:
a = int(st.pop())
b = int(st.pop())
st.append(a*b)
elif i == t[3]:
a = int(st.pop())
b = int(st.pop())
st.append(int(b/a))
return int(st[0])