【算法11天:Day11】第五章栈和队列 LeetCode 有效的括号(20)

57 阅读1分钟

题目三:

image.png

解法一:(栈)

var isValid = function(s) {
    const stack = []
    for (let i = 0; i < s.length; i++) {
        let c = s[i]
        switch (c) {
            case '(':
                stack.push(')')
                break
            case '[':
                stack.push(']')
                break
            case '{':
                stack.push('}')
                break
            default:
                if(c !== stack.pop()) {
                    return false
                }
        }
    }
    return stack.length === 0
};

解法二:(hashmap)

var isValid = function(s) {
    const stack = []
    const map = {
        "(": ")",
        "{": "}",
        "[": "]"
    }
    for (const x of s) {
        if (x in map) {
            stack.push(x)
            continue
        }
        if (map[stack.pop()] !== x) {
            return false
        }
    }
    return !stack.length
};

// 或者

var isValid = function (s) {
    var map = {
        "(": ")",
        "[": "]",
        "{": "}"
    }
    var leftArr = []
    for (var ch of s){
        if (ch in map) leftArr.push(ch); //为左括号时,顺序保存
        else { //为右括号时,与数组末位匹配
            if(ch != map[leftArr.pop()]) return false;
        }
    }
    return !leftArr.length //防止全部为左括号
};

解法三:(替换)

解题思路:找到最内层的括号对,消去,重复此过程,若存在无法消去的字符则说明字符串无效。

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;
};