音乐
音乐
暂未播放
0:00/0:00
暂无歌词
LeetCode | 有效的括号
372 字
2 分钟
LeetCode | 有效的括号
分类:栈
题目#
给定一个只包括 '(',')','{','}','[',']' 的字符串 s,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
示例 1:
1输入:s = "(]"2输出:false示例 2:
1输入:s = "([])"2输出:true讲解#
括号匹配是栈的经典应用。从左到右扫描字符串,用一个字典 pairs 存右括号到左括号的映射。
遇到左括号(不在 pairs 中):入栈。
遇到右括号:检查栈是否为空,或者栈顶是否匹配 pairs[ch]。不匹配直接返回 False。
提前判断:字符串长度是奇数直接返回 False,因为有效的括号一定是成对出现。
最后栈必须为空,才算全部匹配。
复杂度#
- 暴力做法:不断替换
"()"、"[]"、"{}"直到字符串不再变化,时间复杂度O(n²)。 - 栈:
- 时间复杂度:
O(n) - 空间复杂度:
O(n)
- 时间复杂度:
代码#
源码#
1class Solution:2 def isValid(self, s: str) -> bool:3 if len(s) % 2 == 1:4 return False5
6 pairs = {')': '(', ']': '[', '}': '{'}7 stack = []8
9 for ch in s:10 if ch not in pairs:11 stack.append(ch)12 elif not stack or stack.pop() != pairs[ch]:13 return False14
15 return not stack测试#
1sol = Solution()2
3assert sol.isValid("()") == True4assert sol.isValid("()[]{}") == True5assert sol.isValid("(]") == False6assert sol.isValid("([])") == True7assert sol.isValid("([)]") == False8assert sol.isValid("{[]}") == True9assert sol.isValid("") == True10assert sol.isValid("((") == False11
12print("PASS")参考资料#
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
LeetCode | 有效的括号
https://leetcode.cn/problems/valid-parentheses/最后更新于 2026-08-12
部分内容可能已过时
相关文章智能推荐
1
LeetCode | 最长回文子串
LeetCodeLeetCode 最长回文子串题解:中心扩展法枚举每个奇偶中心向两侧扩展,时间复杂度 O(n²),空间复杂度 O(1)。
2
LeetCode | 无重复字符的最长子串
LeetCodeLeetCode 无重复字符的最长子串题解:使用哈希集合与滑动窗口维护不含重复字符的连续片段。
3
LeetCode | 二叉树的中序遍历
LeetCodeLeetCode 二叉树的中序遍历题解:使用递归法和迭代栈法完成左、根、右遍历。
4
LeetCode | 盛最多水的容器
LeetCodeLeetCode 盛最多水的容器题解:使用双指针从两端向中间移动,计算能够装下的最大水量。
5
LeetCode | 移动零
LeetCodeLeetCode 移动零题解:使用双指针原地移动零,同时保持非零元素相对顺序。
随机文章随机推荐
暂无随机文章
评论区
分享你的想法,与大家交流讨论
--
总访问量
--
访客数
公告
音乐
音乐
暂未播放
0:00/0:00
暂无歌词
站点统计
文章
66
分类
16
标签
93
总字数
477,284
运行时长
0 天
最后活动
0 天前
最新动态



