LC 20栈与队列简单第 34 / 95 题

有效的括号

Valid Parentheses

栈匹配
本机进度仅保存在当前浏览器

题目描述

给定一个只包括 (、)、{、}、[、] 的字符串 s,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合,且必须以正确的顺序闭合。

示例:s = "()[]{}" 有效;s = "([)]" 无效。

解题思路

  1. 括号匹配的"后进先出"结构天然对应栈:遇到左括号入栈,遇到右括号与栈顶配对。
  2. 栈顶不匹配或栈已空却遇到右括号,立即判无效。
  3. 遍历结束后栈必须为空,否则还有未闭合的左括号。

参考实现

查看参考实现Python · 建议先自行作答
def isValid(s):
    # 右括号 -> 对应左括号 的配对表
    pairs = {')': '(', ']': '[', '}': '{'}
    stack = []
    for ch in s:
        if ch in pairs:
            if not stack or stack.pop() != pairs[ch]:
                return False
        else:
            stack.append(ch)
    return not stack

复杂度与归属

时间复杂度O(n)
空间复杂度O(n)
所属分类栈与队列
题源LeetCode 20

关联教程

返回题图鉴