括号匹配是栈的典型应用:左括号入栈,右括号必须和栈顶的左括号配对。
扫描字符串时:
- 遇到
(、[、{:入栈 - 遇到
)、]、}:检查栈顶是否是对应的左括号 - 如果栈为空、类型不匹配,立即判定无效
- 扫描结束后,栈也必须为空
这个过程只需要从左到右看一遍。
复杂度
- 时间:O(n)
- 空间:O(n)(最坏情况下所有字符都是左括号)
在动画里看什么
- 上方字符格按扫描顺序移动
i - 绿色表示已经完成匹配的一对括号
- 红色表示第一个导致失败的位置
- 下方 stack 显示当前还没匹配的左括号
数据结构
括号匹配是栈的典型应用:左括号入栈,右括号必须和栈顶的左括号配对。
扫描字符串时:
(、[、{:入栈)、]、}:检查栈顶是否是对应的左括号这个过程只需要从左到右看一遍。
i