每天一道算法题:有效的括号问题

129 阅读1分钟
         //有效的括号问题
        //给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。 有效字符串需满足:

        // 左括号必须用相同类型的右括号闭合。
        // 左括号必须以正确的顺序闭合。
        /* 
        
        示例 1:
        输入:s = "()"
        输出:true
        
        示例 2:
        输入:s = "()[]{}"
        输出:true
        
        示例 3:
        输入:s = "(]"
        输出:false
        
        示例 4:
        输入:s = "([)]"
        输出:false
        
        示例 5:
        输入:s = "{[]}"
        输出:true
        
       */
        function isValid(str) {
            let len = str.length;
            if (len % 2 !== 0) return false;
            let obj = {
                '(': ')',
                '[': ']',
                '{': '}'
            }
            let arr = [];
            for (let i = 0; i < len; i++) {
                let item = str[i];
                // 有左括号就入栈
                if (obj[item]) {
                    arr.push(item);
                } else {

                    // 1. 如果栈内没有左括号,直接false
                    // 2. 有数据但是栈顶元素和右括号不是一对
                    if (!arr.length || obj[arr.pop()] !== item) {
                        return false;
                    }
                }
            }
            // 检查栈内还有没有元素
            return !arr.length;
        }