day11 代码随想录算法训练营 20. 有效的括号
题目:20. 有效的括号
我的感悟:
- 脑回路清奇
理解难点:
- 遇到左括号存对应的右括号
- 3中情况,
- 1.左括号多了
- 2.右括号多了
- 3.左右括号不匹配
- 剪枝:奇数可以直接剪枝
- 注意为空的判断,防止报错
代码难点:
- 存3种情况
- 23情况要返回False
- 其他直接pop
- 最后判断stack栈为不为空,来确定第1种情况
总结概括:
代码示例:
class Solution:
def isValid(self, s: str) -> bool:
stack=[]
# 3种情况
# 1.左多 | 2.右多 | 3.左右不匹配
for i in s:
if i == "(":
stack.append(")")
elif i == "[":
stack.append("]")
elif i == "{":
stack.append("}")
elif not stack or stack[-1] != i: # 23情况,为空说明2右括号多了,如果不相等说明不匹配。
return False
else:
stack.pop() # 正常弹出
if stack:# 说明第1中情况
return False
return True
通过截图:
扩展写法:
- 往stack里面加入一个"?" 减少pop出来的报错
- 最后判断stack==1就可以。
- 思路来自:Krahets
资料:
https://programmercarl.com/0020.有效的括号