js函数实现大括号匹配
大括号匹配的实现思路
大括号匹配问题通常指检查字符串中的大括号 { 和 } 是否成对出现且嵌套正确。以下是几种实现方法:
使用栈结构实现
栈是解决括号匹配问题的经典数据结构。遍历字符串时,遇到左括号 { 入栈,遇到右括号 } 出栈。最终栈为空则匹配成功。

function isBalanced(str) {
const stack = [];
for (const char of str) {
if (char === '{') {
stack.push(char);
} else if (char === '}') {
if (stack.length === 0) return false;
stack.pop();
}
}
return stack.length === 0;
}
计数器优化实现
当仅需处理单一括号类型时,可以用计数器替代栈。遇到 { 计数器加1,遇到 } 计数器减1。计数器为负或最终不为零均不匹配。

function isBalanced(str) {
let count = 0;
for (const char of str) {
if (char === '{') count++;
else if (char === '}') {
if (--count < 0) return false;
}
}
return count === 0;
}
处理多类型括号扩展
若需同时匹配 {}、[]、() 等多种括号,栈结构仍适用,但需增加配对检查逻辑:
function isBalanced(str) {
const stack = [];
const pairs = { '{': '}', '[': ']', '(': ')' };
for (const char of str) {
if (pairs[char]) {
stack.push(char);
} else if (Object.values(pairs).includes(char)) {
if (pairs[stack.pop()] !== char) return false;
}
}
return stack.length === 0;
}
边界条件处理
实际应用中需考虑以下边界情况:
- 空字符串直接返回
true - 忽略非括号字符(如字母、数字)
- 右括号出现在左括号前立即返回
false
测试用例示例
console.log(isBalanced('')); // true
console.log(isBalanced('{}')); // true
console.log(isBalanced('{{}}')); // true
console.log(isBalanced('}{')); // false
console.log(isBalanced('{{}')); // false
性能分析
- 时间复杂度:O(n),需遍历整个字符串一次
- 空间复杂度:O(n),栈可能存储最多 n/2 个左括号(最坏情况)
以上实现可根据具体需求调整,例如添加错误位置报告或支持自定义括号对。






