leetcode-20. 有效的括号

192 阅读1分钟

题目:

给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
每个右括号都有一个对应的相同类型的左括号
image.png
链接:leetcode.cn/problems/va…

解题思路:【栈】

  1. 由于字符串中只包含了括号,首先可以直接根据长度判断,奇数则直接返回False,偶数则进入接下来程序。
  2. 建立一个栈,循环字符串,当遇到右括号的时候就入栈,遇到左括号的时候就出栈,此时判断出栈的左括号是否与遇到的右括号是否是一对,若不是,则返回False;若是,则继续执行,循环完字符串后,判断栈是否为空,为空则返回True,否则返回False。

  1. 边界情况:当遇到的第一个括号就是左括号的时候pop()会出错,因此需要一个展位元素。如 ')}'

代码:

class Solution:
    def isValid(self, s: str) -> bool:
        if len(s)% 2 != 0:
            return False 
        mapping_dict= {'('')''['']''{''}''?''?'}
        stack = ['?']
        for c in s:
            if c in mapping_dict:
                stack.append(c)
        elif mapping_dict[stack.pop()] != c:
        return False
        
        return len(stack) == 1