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.有效的括号

 

posted @ 2024-01-08 11:40  o蹲蹲o  阅读(3)  评论(0编辑  收藏  举报