可用字符数组模拟栈实现括号匹配:用char[]作栈空间、int top作栈顶指针,遇左括号入栈,遇右括号判空并比对匹配性,遍历完top为0则成功。

可以用字符数组模拟栈结构,逐个扫描括号并手动维护一个“栈顶指针”,实现轻量级括号匹配校验,无需额外依赖 Stack 类或集合。
核心思路:用数组模拟栈行为
声明一个 char[] 作为“栈空间”,用一个 int 变量(如 top)表示当前栈顶索引。遇到左括号就 push(stack[top++] = ch),遇到右括号就 pop(top--),再比对是否匹配。
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
关键步骤与判断逻辑
- 初始化一个足够长的 char 数组(如长度为字符串长度的一半向上取整,或直接取原字符串长度)和 top = 0
- 遍历输入字符串的每个字符:
- 若为 '('、'{'、'[',存入 stack[top] 并 top++
- 若为 ')'、'}'、']':
- 先检查 top == 0 → 说明无左括号可匹配,直接返回 false
- 取出 stack[top-1],判断是否与当前右括号配对(如 ')' 应对应 '(')
- 不匹配则返回 false;匹配则 top--
- 遍历结束后,检查 top == 0:为 true 表示所有左括号都被正确消耗,匹配成功;否则存在未闭合的左括号
代码片段示意(精简可运行)
(假设输入为非 null 字符串)
public static boolean isValid(String s) {
char[] stack = new char[s.length()];
int top = 0;
for (char ch : s.toCharArray()) {
if (ch == '(' || ch == '{' || ch == '[') {
stack[top++] = ch;
} else {
if (top == 0) return false;
char last = stack[--top];
if ((ch == ')' && last != '(') ||
(ch == '}' && last != '{') ||
(ch == ']' && last != '[')) {
return false;
}
}
}
return top == 0;
}
注意事项与优化点
- 数组长度不必严格等于输入长度,但需 ≥ 最大可能的嵌套深度;用 s.length() 是安全且简洁的选择
- 避免在循环中重复调用 s.charAt(i),优先用 toCharArray() 遍历提升可读性与性能
- 不支持空格、字母等非括号字符的跳过——如需兼容,加一层 if (isBracket(ch)) 判断
- 该方式内存占用固定、无对象创建开销,适合嵌入式或高性能场景

















