[路飞]_leetcode20. 有效的括号

89 阅读1分钟

题目描述

leetcode20. 有效的括号

给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。

有效字符串需满足:

  • 左括号必须用相同类型的右括号闭合。
  • 左括号必须以正确的顺序闭合。

示例

示例1:

输入: s = "()"
输出: true

示例2:

输入: s = "()[]{}"
输出: true

示例3:

输入: s = "(]"
输出: false

示例4:

输入: s = "([)]"
输出: false

示例5:

输入: s = "{[]}"
输出: true

提示:

  • 1 <= s.length <= 104
  • s 仅由括号 '()[]{}' 组成

JavaScript实现

/**
 * @param {string} s
 * @return {boolean}
 */
// 遇到左括号就入栈;
// 遇到右括号,看看是否与前一个匹配,如果不匹配就代表不合法
var isValid = function(s) {
    let arr = [];
    let obj = {
        ')':'(',
        ']':'[',
        '}':'{',
    }
    for(let i=0; i < s.length; i++) {
        switch (s[i]){
            case '(':
            case '[':
            case '{': arr.push(s[i]); break;
            case ')': 
                // if (!arr.length || arr[arr.length - 1] != '(') return false;
                // arr.pop(); //匹配上就出栈
                // break;
            case ']': 
                // if (!arr.length || arr[arr.length - 1] != '[') return false;
                // arr.pop(); //匹配上就出栈
                // break;
            case '}': 
                // if (!arr.length || arr[arr.length - 1] != '{') return false;
                // arr.pop(); //匹配上就出栈
                // break;
                if(!arr.length || obj[s[i]] != arr[arr.length - 1]) return false;
                arr.pop(); break;
        }
    }
    return arr.length == 0


};