有效的括号|刷题打卡

111 阅读1分钟

一、题目描述:

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

有效字符串需满足:

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

示例 1:

输入:s = "()"

输出:true

示例 2:

输入:s = "(]"

输出:false

二、思路分析

看到题目描述的时候,一个最傻的想法出现了,括号一共有六个,我分别取六个括号的数量,然后看看数量对不对的上不就行了么。。

第二个 首先边界处理 空字符串直接true

定义一个栈来存储所有的左括号对应的右括号

在JoinMap未匹配到的是右括号

出栈,和当前的val对比,不一致直接false,一致则继续循环

兜底:栈空则true,不为空则false

三、AC 代码:

1.应该算是哈希表吧

var isValid = function (s) {
    if (!s) return true
    const stack = []
    const JoinMap = {
        '{': '}',
        '(': ')',
        '[': ']',
    }
    for (let i = 0; i < s.length; i++) {
        let val = s[i]
        let tmp
        if (tmp = JoinMap[val]) {
            stack.push(tmp)
        } else {
            if (val !== stack.pop()) {
                return false
            }
        }
    }
    return !stack.length
};


四、总结:

看完似懂非懂的,当我感觉这个跟罗马数挺像的

本文正在参与「掘金 2021 春招闯关活动」, 点击查看活动详情