0
点赞
收藏
分享

微信扫一扫

力扣20.有效的括号

艾晓雪 2022-03-12 阅读 88

思路
检查括号配对的原则如下:在扫描正文的过程中,遇到的闭括号应该与此前最近遇到且尚未获得匹配的开括号配对。如果最近未匹配的开括号与当前闭括号不配对,或者找不到这样的开括号,就是匹配失败,说明这段正文里的括号不匹配。
由于括号的出现可能嵌套,需要逐对匹配:当前闭括号应当与前面最近的尚未匹配的开括号匹配,下一个括号应当与前面次近的括号匹配。这说明需要存储的开括号的使用原则是后存入者先使用,符合LIFO原则。
进而,如果一个符号已配对,就应该删除这个括号,为随后的匹配做好准备。显然,在扫描的过程中,后遇到并保存的开括号将先配对并被删除,这是按出现的顺序后进先出。这些情况说明,用栈保存遇到的开括号可以支持匹配工作。
具体的python代码如下:

class Solution(object):
    def isValid(self, s):
        """
        :type s: str
        :rtype: bool
        """
        if len(s) % 2 == 1:
            return False
        Stack = []
        char_dict = {
            "]":"[",
            ")":"(",
            "}":"{"
        }
        # 扫描符号
        for char in s:
            # 判断闭括号
            if char in char_dict:
                # not Stack是指不为空,则说明左右括号不一致
                # Stack.pop()如果不匹配则返回False,如果匹配Stack也执行了出栈操作(重点)
                if not Stack or char_dict[char] != Stack.pop():
                    return False
            # 保存开括号
            else:
                Stack.append(char)
        return not Stack
举报

相关推荐

0 条评论