【LeetCode HOT100】20. 有效的括号

加载中... 浏览

题目

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

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。
  3. 每个右括号都有一个对应的相同类型的左括号。

示例:

输入:s = "([)]"
输出:false

提示

一句话思路:用栈——遇到左括号入栈,遇到右括号检查栈顶是否匹配

  • 遇到左括号就入栈;遇到右括号时,栈不为空且栈顶恰好是对应左括号则出栈,否则无效。
  • 用哈希表 dic 建立「右括号 → 左括号」的映射,方便快速查找。
  • 最终 not stack:栈为空说明所有左括号都被正确闭合,不为空则有未闭合的左括号。
  • 时间 O(n)、空间 O(n)。

答案

python
class Solution:
    def isValid(self, s: str) -> bool:
        dic = {')': '(', ']': '[', '}': '{'}       # 右括号到左括号的映射
        stack = []
        for i in s:                                 # 遍历字符串每个字符
            if stack and i in dic:                  # 栈非空 且 当前字符是右括号
                if stack[-1] == dic[i]:             # 栈顶是匹配的左括号
                    stack.pop()                     # 匹配成功,弹出栈顶
                else:                               # 栈顶不是对应的左括号
                    return False                    # 不匹配,无效
            else:                                   # 栈为空 或 当前字符是左括号
                stack.append(i)                     # 左括号入栈
        return not stack                            # 栈为空说明全部匹配,有效

留言板

加载评论中...
【LeetCode HOT100】35. 搜索插入位置
Valaxy v0.28.0-beta.1 驱动|主题-Yunv0.28.0-beta.1