有效的括号

107 阅读1分钟

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

匹配括号,可以用栈的形式,栈是先进先出,先定义一个map对象把括号都一一匹配起来,然后开始匹配,如果是左边的则压入栈,一旦匹配上,则把最上面的符号出栈,然后再继续匹配,如果匹配到另一边的但是不是符合的括号,则表示不是有效的字符串,一进一出,循环结束判断最后的栈是否是空的。 代码如下:

/**
 * @param {string} s
 * @return {boolean}
 */
var isValid = function(s) {
    // 定义要匹配的map
    const obj = {
        '(':')',
        '{':'}',
        '[':']',
    };
    const stack = []; // 空栈
    for(let i=0; i< s.length; i++) {
        const val = s[i];
        if (val in obj) {
                // 压栈
            stack.push(val);
        } else {
            if (val !== obj[stack.pop()]) {
                // 没有匹配到符合的括号
                return false;
            }
        }
    }
    return !stack.length;
}