20. 有效的括号
题目
20. 有效的括号(简单)
给定一个只包括
'(',')','{','}','[',']'
的字符串 s,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
数据范围:
1 <= s.length <= 10^4s仅由括号'()[]{}'组成
示例
示例 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- 时间复杂度:,每个字符最多入栈、出栈一次。
- 空间复杂度:,栈最坏情况下存
n个左括号。
相关题目
- LC 22. 括号生成(回溯生成所有有效括号)
- LC 32. 最长有效括号(DP / 栈 / 双指针)
- LC 301. 删除无效的括号(DFS / BFS)
- LC 394. 字符串解码(栈处理嵌套)
- LC 921. 使括号有效的最少添加(贪心 / 栈)
- LC 1249. 移除无效的括号(栈 + 标记)
20. 有效的括号
https://mingsm17518.github.io/2026/11/03/刷题笔记/Hot100/栈/20. 有效的括号/