LeetCode | 有效的括号

372 字
2 分钟
LeetCode | 有效的括号

分类:

题目#

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

有效字符串需满足:

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

示例 1:

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

示例 2:

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

讲解#

括号匹配是栈的经典应用。从左到右扫描字符串,用一个字典 pairs 存右括号到左括号的映射。

遇到左括号(不在 pairs 中):入栈。 遇到右括号:检查栈是否为空,或者栈顶是否匹配 pairs[ch]。不匹配直接返回 False

提前判断:字符串长度是奇数直接返回 False,因为有效的括号一定是成对出现。

最后栈必须为空,才算全部匹配。

复杂度#

  • 暴力做法:不断替换 "()""[]""{}" 直到字符串不再变化,时间复杂度 O(n²)
  • 栈:
    • 时间复杂度:O(n)
    • 空间复杂度:O(n)

代码#

源码#

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

测试#

sol = Solution()
assert sol.isValid("()") == True
assert sol.isValid("()[]{}") == True
assert sol.isValid("(]") == False
assert sol.isValid("([])") == True
assert sol.isValid("([)]") == False
assert sol.isValid("{[]}") == True
assert sol.isValid("") == True
assert sol.isValid("((") == False
print("PASS")

参考资料#

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

LeetCode | 有效的括号
https://leetcode.cn/problems/valid-parentheses/
作者
平昊阳
发布于
2026-08-12
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
平昊阳
乘长风,破巨浪, 展鸿图于未央!
--
总访问量
--
访客数
公告
欢迎来到我的个人博客!欢迎关注交流吖!
更多相关公告,见
社交-留言」。
音乐
封面

音乐

暂未播放

0:000:00
暂无歌词
站点统计
文章
66
分类
16
标签
93
总字数
477,284
运行时长
0
最后活动
0 天前

文章目录