判断给定字符串中的大括号是否闭合(返回True False;对于空字串,返回 True),在 Javascript 里,数组 Array 可以很方便的模拟栈的行为。
- 将大括号分为左括号和右括号
- 左括号看做入栈信号,右括号看做出栈信号
- 如果出栈时,没有与之匹配的元素,则结果不匹配,即返回 false
- 如果巡检完毕,得到的为空栈,则结果匹配,返回true
代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>判断给定字符串中的大括号是否闭合</title>
</head>
<body>
</body>
<script>
function isBanlanced(str) {
let arr = [...str];
let stack = [];
for (let i = 0; i < arr.length; ++i) {
if (arr[i] == "{") {
stack.push("{");
} else if (arr[i] == "}") {
if (stack.length === 0) {
return false;
}
console.log(arr[i], stack)
stack.pop();
}
}
/**
*
* 注意:map 循环是无法跳出的,所以下面方法不可行,只能使用 for 循环
*
**/
// arr.map((val, index) => {
// if (val == "{") {
// stack.push("{");
// } else if (val == "}") {
// if (stack.length === 0) {
// return false;
// }
// console.log(val, stack)
// stack.pop();
// }
// })
return stack.length === 0;
}
console.log(isBanlanced("[{}]{}{}}}}}{}{}{}{}{}{}{}")); // false
console.log(isBanlanced("{}{}{{}}")); // true
console.log(isBanlanced("")); // true
</script>
</html>
js 中 map 或 foreach 方法是无法跳出循环的,如果有需要跳出循环的遍历,推荐使用for循环