「栈/字典」leetcode 20.有效的括号

189 阅读2分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

一、了解题目

附上原题链接:leetcode 20. 有效的括号

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

有效字符串需满足:

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

二、题解分析

这道题其实会用到两个知识点来解答,一个是,一个是字典。那么接下来我们来看下这道题的解题步骤,具体如下:

  • 先判断字符串的个数是否为偶数,不是则直接返回;
  • 建立一个字典,分别将三个括号映射进来;
  • 遍历字符串。

三、代码实现

依据上面的题解,我们将用 js 来实现这道题。具体实现代码如下:

let isValid = function(s){
    //  1. 判断字符串的个数是否为偶数,不是则直接返回
    if(s.length % 2 === 1){
        return false;
    }
​
    // 2.新建一个空栈
    const stack = [];
    // 3.新建一个字典,把三个对应的括号映射进入
    const map = new Map();
    map.set('(', ')');
    map.set('{', '}');
    map.set('[', ']');
​
    // 4.循环字符串中的每一个括号字符
    for(let i = 0; i < s.length; i++){
        // 5. 定义一个变量c,来存放每一个字符的内容
        const c = s[i];
        // 6.先判断当前括号是否是左括号,如果是则把其一一丢进栈中
        if(map.has(c)){
            stack.push(c);
        }
        // 7. 如果遍历到的字符不是左括号的情况
        else{
            // 8. 获取栈中最后一个括号的值
            const t = stack[stack.length - 1];
            // 9. 用get方法去对应栈最后一个括号所对应的右括号,
            // 并将其与当前所遍历的值进行匹对,查看是否相等,
            // 如果相等则说明最后一个匹对成功,并将最后一个值从栈中弹出
            if(map.get(t) === c){
                stack.pop();
            }
            // 10. 如果并不相等则说明不是有效的括号,直接返回false
            else{
                return false;
            }
        }
    }
    // 11. 最终当全部匹配完成,且栈空时,才说明是有效的括号
    return stack.length === 0;
}
​
console.log(isValid('[{()}]')); // true
console.log(isValid('[{)}')); // false

以上就是关于有效括号的的题解,不知道对小伙伴们是否有帮助呢?

我们下期见👋👋👋