20. 有效的括号

题目

20. 有效的括号(简单)

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

有效字符串需满足:

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

数据范围:

  • 1 <= s.length <= 10^4
  • s 仅由括号 '()[]{}' 组成

示例

示例 1:

输入: s = "()"
输出: true

示例 2:

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

示例 3:

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

示例 4:

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

示例 5:

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

思路

栈匹配:长度为奇数直接排除;遇左括号入栈,遇右括号检查栈顶是否为对应的左括号(栈空或不匹配则无效);扫描结束后栈恰好为空才有效。

代码

class Solution:
    def isValid(self, s: str) -> bool:
        if len(s) % 2 == 1:
            return False
        pairs = {
            ')': '(',
            '}': '{',
            ']': '['
        }
        l = list()
        for ch in s:
            if ch in pairs:
                if not l or l[-1] != pairs[ch]:
                    return False
                l.pop()
            else:
                l.append(ch)
        return not l
  • 时间复杂度:O(n)O(n),每个字符最多入栈、出栈一次。
  • 空间复杂度:O(n)O(n),栈最坏情况下存 n 个左括号。

相关题目


20. 有效的括号
https://mingsm17518.github.io/2026/11/03/刷题笔记/Hot100/栈/20. 有效的括号/
作者
Ming
发布于
2026年11月3日
更新于
2026年11月3日
许可协议