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 标签。