有效的括号
算法-有效的括号
背景
-
算法–有效的括号
-
博主以代码随想录算法公开课进行学习
题目
-
给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 注意空字符串可被认为是有效字符串。
示例 1:
- 输入: “()”
- 输出: true
示例 2:
- 输入: “()[]{}”
- 输出: true
示例 3:
- 输入: “(]”
- 输出: false
示例 4:
- 输入: “([)]”
- 输出: false
示例 5:
- 输入: “{[]}”
- 输出: true
思路
- 核心逻辑:利用栈的「后进先出」特性匹配括号——左括号入栈,右括号匹配栈顶左括号,匹配成功则出栈,失败则直接返回false;
- 具体步骤:
- 遍历字符串每个字符:
- 若为左括号(
(/{/[):将对应的右括号压入栈(简化后续匹配逻辑); - 若为右括号:
- 栈为空 → 无左括号匹配,返回false;
- 栈顶元素≠当前右括号 → 类型不匹配,返回false;
- 栈顶元素=当前右括号 → 匹配成功,弹出栈顶;
- 若为左括号(
- 遍历结束后:栈为空则所有括号匹配成功,否则存在未闭合的左括号。
- 遍历字符串每个字符:
代码
1 | class Solution { |
总结
- 有效的括号核心是栈+括号映射,利用栈的LIFO特性匹配嵌套括号;
- 关键技巧:左括号入栈时压入对应右括号,简化后续匹配逻辑;
- 面试需掌握「核心逻辑」「边界案例」「Deque替代Stack的原因」三个考点;
- 复杂度为O(n)(时间+空间)