【leetcode】20. 有效的括号

48 阅读1分钟

leetcode-20.png

典型的用stack来解决的题目,同时可以看下22题
用  来解决这个问题,因为栈遵循 后进先出 的原则,非常适合处理括号匹配问题。当遇到左括号时,将其压入栈中;当遇到右括号时,检查栈顶是否是相应的左括号,如果匹配,则弹出栈顶元素。最后,如果栈为空,说明所有的括号匹配正确,否则不匹配。

var isValid = function (s) {
    let stack = []
    // 方便查找匹配的括号
    let hash = new Map()
    hash.set('(', ')')
    hash.set('{', '}')
    hash.set('[', ']')
    for (let i = 0; i < s.length; ++i) {
        if (s[i] === '(' || s[i] === '[' || s[i] === '{') {
            stack.push(s[i])
        } else {
            // 当前括号与栈顶的不匹配,那就直接是false了
            if (s[i] !== hash.get(stack.pop())) {
                return false
            }
        }
    }
    return stack.length === 0
};

map反向

var isValid = function (s) {
    let map = new Map();
    map.set(")", "(");
    map.set("]", "[");
    map.set("}", "{");
    let stack = [];
    for (let i = 0; i < s.length; ++i) {
        if (["(", "[", "{"].includes(s[i])) {
            stack.push(s[i]);
        } else {
            if (stack.pop() !== map.get(s[i])) return false;
        }
    }
    return stack.length === 0;
};