判断给定字符串中的大括号是否闭合

判断给定字符串中的大括号是否闭合(返回True False;对于空字串,返回 True),在 Javascript 里,数组 Array 可以很方便的模拟栈的行为。

  1. 将大括号分为左括号和右括号
  2. 左括号看做入栈信号,右括号看做出栈信号
  3. 如果出栈时,没有与之匹配的元素,则结果不匹配,即返回 false
  4. 如果巡检完毕,得到的为空栈,则结果匹配,返回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循环

原文地址:https://www.cnblogs.com/cckui/p/9909859.html