mengjian-github/leetcode

20. 有效的括号

Opened this issue · 1 comments

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

有效字符串需满足:

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

示例 1:

输入:s = "()"
输出:true
示例 2:

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

输入:s = "(]"
输出:false
示例 4:

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

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

这是一道经典的题目,我们可以利用栈的特性来匹配括号:

/**
 * @param {string} s
 * @return {boolean}
 */
var isValid = function(s) {
    
    if (s.length % 2 !== 0) {
        return false;
    }

    function isMatch(l, r) {
        if (l === '(') {
            return r === ')';
        } else if (l === '[') {
            return r === ']';
        } else if (l === '{') {
            return r === '}';
        }
        return false;
    }

    const leftStack = [];

    for (const c of s) {
        switch(c) {
            case '(':
            case '[':
            case '{':
                leftStack.push(c);
                break;
            case ')':
            case ']':
            case '}':
                const left = leftStack.pop();
                if (!isMatch(left, c)) {
                    return false;
                }
        }
    }

    return leftStack.length === 0;
};