Algorithms first

有效的括号 · 交互式算法学习

判断括号是否按正确类型和顺序闭合。

#20 ·

有效的括号

Valid Parentheses

测试用例s = "()[]{}"
栈 / 队列 / 堆3 个关键状态
步骤 1( 入栈,) 与栈顶匹配。stack=[]
栈顶
(
)
[
]
{
}
推荐

栈匹配闭括号

时间 O(n)空间 O(n)

左括号入栈,右括号必须匹配栈顶。

1function isValid(s) {2  const stack = [],3    pair = {4      ')': '(',5      ']': '[',6      '}': '{'7    };8  for (const c of s) {9    if (!pair[c]) stack.push(c);10    else if (stack.pop() !== pair[c]) return false;11  }12  return stack.length === 0;13}
多语言参考

Java · C++ · Go

来源 · CC BY-SA 4.0 ↗

这是一组同题正确实现,独立于上方当前动画方法;不同语言可能采用另一种正确策略。

1class Solution {2    public boolean isValid(String s) {3        Deque<Character> stk = new ArrayDeque<>();4        for (char c : s.toCharArray()) {5            if (c == '(' || c == '{' || c == '[') {6                stk.push(c);7            } else if (stk.isEmpty() || !match(stk.pop(), c)) {8                return false;9            }10        }11        return stk.isEmpty();12    }13 14    private boolean match(char l, char r) {15        return (l == '(' && r == ')') || (l == '{' && r == '}') || (l == '[' && r == ']');16    }17}
交互式算法学习

从执行步骤真正理解 LeetCode 经典 150

本站整理 150 道高频算法面试题和 302 种解法。动画方法同步展示 JavaScript 与 Python;每题另提供 Java、C++ 与 Go 同题参考实现。

多形态可视化数组、矩阵、DP 表、递归树、树图、链表、栈队列堆、区间和状态机按解法选择。
动画与代码同步当前状态、步骤说明、变量和代码高亮保持一一对应,可逐步播放和回退。
适合面试复习每种方案都给出思路、时间复杂度、空间复杂度、测试用例和 LeetCode 中文原题入口。
AlgoViz Lab

有效的括号 · 解法对比

判断括号是否按正确类型和顺序闭合。

测试用例
s = "()[]{}"
题目分类
解法对比
2
方案 1

反复删除成对括号

不断删除 ()、[]、{},最终应为空。

时间
O(n²)
空间
O(n)
方案 2

栈匹配闭括号

左括号入栈,右括号必须匹配栈顶。

时间
O(n)
空间
O(n)