淘先锋技术网

首页 1 2 3 4 5 6 7

Javascript 平衡组

Javascript 平衡组是指括号匹配的一种算法,在开发中经常会用到。在一组由左右括号组成的字符串中,只有括号完全匹配,才算是一个平衡组。

举个例子:

// 平衡组
let str1 = '()';
let str2 = '(())';
let str3 = '()()()()()';
// 不平衡组
let str4 = '(';
let str5 = '())';
let str6 = '((())))';

上面的例子中,str1, str2, str3 是一个平衡组,因为它们都是左右括号完全匹配的结果,而 str4, str5, str6 就不是一个平衡组。其中,str4 由于左括号没有关闭,str5 是由于右括号多了,str6 则是由于左右括号的数量不匹配导致的。

对于一个开发者来说,判断一个字符串是否为平衡组是非常常见的需求。那么该如何通过 Javascript 来实现呢?

我们可以通过栈(Stack)来实现:遍历字符串,如果是左括号则把它压入栈中,如果是右括号,则看栈顶的元素是否是能与它匹配的左括号,如果是,则弹出栈顶元素,否则说明该字符串不是一个平衡组。

代码如下:

function isBalanced(str) {
let stack = [];
for (let i = 0; i< str.length; i++) {
if (str[i] === '(') {
stack.push(str[i]);
} else if (str[i] === ')') {
if (stack[stack.length - 1] === '(') {
stack.pop();
} else {
return false;
}
}
}
return stack.length === 0;
}
// 测试一下
console.log(isBalanced('()')); // true
console.log(isBalanced('(())')); // true
console.log(isBalanced('(((())))')); // true
console.log(isBalanced(')(')); // false
console.log(isBalanced('(()))')); // false
console.log(isBalanced(')))(((')); // false

测试结果表明,对于一个平衡组,该函数返回 true,非平衡组则返回 false。

小结

这篇文章介绍了 Javascript 平衡组的概念,并给出了用栈实现平衡组判断的代码。观察这个算法,发现它和匹配 HTML 标签的算法非常相似,这是因为 HTML 标签也是由左右符号组成的语言而导致的。因此,这个算法也可以用于解析 HTML 标签。