Leetcode20 有效的括号

1,926 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第15天,点击查看活动详情

天啊,讲力扣课的老师的声音简直爱死了🥰~

至于为啥不先自己做呢?实话实说我的脑子和逻辑思维都一般般,做出来的题不仅浪费了很多时间,方法也不是很好,所以利用学习的方式听老师讲思路和代码,然后自己再利用写文章来进行总体的回顾。每听一道题的讲解都会感叹一下老师的方法简直YYDS~👀

小小抱怨一下,真的不想和技术不怎样又不上进又自以为是的后端合作。。。

还是看题吧~

题目

给定字符串s="[](){}",判断是否为有效字符串。有效的条件为左括号必须用相同的右括号闭合,左括号必须以正确的顺序进行。

例子:

输入:s = "()[]{}"; 输出:true
输入:s = "()"; 输出:true
输入:s = "([)]"; 输出:false

出现场景:编辑器中我们的括号闭合出现不对时会出现报错提醒。

中心思想: 利用栈的后进先出;

思路以及题解

1、利用JS原生创建一个HashMap对象,将括号的配对放进去。(具体为将左括号设置为key,右括号设置为value);

2、创建一个数组stack(array),利用for循环遍历s字符串中的每一个字符。判断当前字符在Map中是否有key,如果有那说明是个左括号,此时需要从Map中取相应的valuepushstack中。如果当前字符在Map中没有key则说明是个右括号,此时需要从stackpop出第一个值与当前的字符判断是否相等,不相等则返回false

3、最后还需要判断stack是否为空,如果不为空则说明还有未闭合的括号,此时需要返回false。

代码示例

/**
 * @param {string} s
 * @return {boolean}
 */
var isValid = function(s) {
    const mappings = new Map();
    mappings.set('(', ')');
    mappings.set('[', ']');
    mappings.set('{', '}');
    const stack = [];
    for(let i = 0; i<s.length; i++) {
        if(mappings.has(s[i])) {
            stack.push(mappings.get(s[i]))
        } else {
            if (stack.pop() !== s[i]) {
                return false;
            }
        }
    }
    if(stack.length !== 0) {
        return false;
    }
    return true;
};