0816 有效的括号

178 阅读1分钟

问题

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

有效字符串需满足:

左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。

解法一

var isValid = function(s) {
    let obj = {
        '(': ')',
        '[': ']',
        '{': '}'
    }
    let stack = [];
    for(let i in s) {
        if(s[i] in obj) {
            stack.push(s[i])
        }else{
            if(obj[stack.pop()] !== s[i]) {
                return false;
            }
        }
    }
    return !stack.length
};
解题思路

栈的思想:先进后出

  • 定义一个obj,对应每个完整的括号
  • 定义一个数组
  • 循环字符串,如果当前的字符存在于obj,把他存到数组中
  • 如果不存在于obj,就拿出数组中最后一个,判断当前项是不是obj中对应
  • 如果最后数组中没有数据了,说明一一对应,否则就是有没有对应的

解法二

 var isValid = function (s) {
    while (s.length) {
        var temp = s;
        s = s.replace('()', '');
        s = s.replace('[]', '');
        s = s.replace('{}', '');
        if (s == temp) return false
    }
    return true;
};
解题思路

要想所有的括号都是对应,那最里层的一定是一对儿,然后把一对儿的一个一个删掉,最后还剩下,说明结果为false,不剩下,说明结果为true