[路飞]_有效的括号

110 阅读1分钟

有效的括号

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

image.png

解题思路

  • 遍历字符串s,想要括号一一对应,那么首先这个字符串的长度是偶数的,奇数是无法对应
  • 其次,后出现的左括号先闭合,由此我们可以使用栈的形式
  • 用一个容器先去储存遇到的左括号,当遇到右括号时,对比于容器中最后一个左括号相对应,那么我们就可以将容器中左括号移除
  • 当不能对应时,字符串s不为有效
  • 最后当所有字符全部遍历结束后,容器中没有遗留的左括号,此字符串为有效

代码如下

var isValid = function(s) {
    const n = s.length;
    if (n % 2 === 1) {
        return false;
    }
    const pairs = new Map([
        [')', '('],
        [']', '['],
        ['}', '{']
    ]);
    const stk = [];
    for (let ch of s){
        if (pairs.has(ch)) {
            if (!stk.length || stk[stk.length - 1] !== pairs.get(ch)) {
                return false;
            }
            stk.pop();
        } 
        else {
            stk.push(ch);
        }
    };
    return !stk.length;
};