20 有效的括号

题目 20 有效的括号

给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。

有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
每个右括号都有一个对应的相同类型的左括号。

示例 1:
输入:s = "()"
输出:true

示例 2:
输入:s = "()[]{}"
输出:true

示例 3:
输入:s = "(]"
输出:false

思路

  • 用栈实现,大家别看到栈就头疼,其实理解了这道题就会觉得超级简单了。
  • 循环字符串,如果遇到“(”,栈中添加“)”,遇到“[”,栈中添加“]”,遇到“{”,栈中添加“}”,这样做得目的是循环遇到了 ), ], } 则直接弹出栈中的元素,如果最后栈为空,则证明括号有效,否则栈无效。(自己画画图举例子试试就知道了超简单了)

代码

class Solution:
    def isValid(self, s: str) -> bool:
        stack = []
        for i in s:
            if i == "(": stack.append(")")
            if i == "[": stack.append("]")
            if i == "{": stack.append("}")

            if i == ")": 
                # 注意万一字符串上来就是),],},此时栈弹不出来元素,返回False
                if stack != [] and stack.pop() == ")":
                    continue
                return False
            if i == "]": 
                if stack != [] and stack.pop() == "]":
                    continue
                return False
            if i == "}": 
                if stack != [] and stack.pop() == "}":
                    continue
                return False
        return stack == []
posted @ 2022-10-27 21:22  时光如你般美好  阅读(14)  评论(0编辑  收藏  举报