← 中文资源

简体中文版本

使用栈检查括号是否配对

通过单次遍历和栈检查圆括号、方括号与花括号是否正确嵌套和闭合。

阅读英文原文

功能说明

括号匹配是解析器和表单校验的基础问题。该实现用一个栈保存未闭合的左括号,遇到右括号时弹出并检查是否与期望类型一致,最后要求栈为空。它只关心三种 ASCII 括号,其他字符会被忽略,因此可以直接检查包含变量名和运算符的表达式片段。

关键代码

左括号字符直接入栈;右括号通过 Map 查找对应左括号,若栈顶不匹配立即返回 false。扫描结束后栈为空才表示完全平衡。非字符串输入在入口处被拒绝,避免隐式转换为字符串后产生误判。

if ("([{".includes(char)) stack.push(char);
else if (PAIRS.has(char)) {
  if (stack.pop() !== PAIRS.get(char)) return false;
}

使用注意

该函数不处理引号、注释或 HTML 标签,因此字符串内的括号也会参与匹配。输入中的其他字符会被忽略,所以 “a(b)c” 视为平衡。多出来的右括号会因栈顶不匹配或 undefined 而失败。它不返回具体错误位置,只返回布尔值。

验证方式

断言 isBalanced(“{[()]}”) 为 true,isBalanced(“([)]”) 为 false,isBalanced(“(()”) 为 false,isBalanced(“)(”) 为 false。空字符串应返回 true,普通文本应返回 true。传入数字或 null 抛 TypeError。深层嵌套应按线性时间完成。