【每日一题】20. 有效的括号 栈

156 阅读2分钟

这是leetcode中20. 有效的括号 ,难度为简单


遇到左括号的时候,把左括号放入到栈中,如果遇到右括号的时候,检测栈的中最上面的是否与它匹配,如果匹配的话,就接着判断,如果不匹配的话,就返回false


题目描述


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

有效字符串需满足:

左括号必须用相同类型的右括号闭合。

左括号必须以正确的顺序闭合。

 

示例 1:

输入:s = "()"

输出:true

示例 2:

输入:s = "()[]{}"

输出:true

示例 3:

输入:s = "(]"

输出:false

示例 4:

输入:s = "([)]"

输出:false

示例 5:

输入:s = "{[]}"

输出:true

 

提示:

1 <= s.length <= 104

s 仅由括号 '()[]{}' 组成

来源:力扣(LeetCode)

链接:leetcode-cn.com/problems/va…

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

算法实现


/**
 * @param {string} s
 * @return {boolean}
 */
var isValid = function(s) {
    //利用栈来进行判断
    var res = []
    var map = new Map([
        [')','('],
        ['}','{'],
        [']','[']
    ])
    for(let a of s){
        //如果是左括号
        if(!map.get(a)){
            res.push(a)
        }
        //如果是右括号
        else{
            //如果栈的最上面的等于新的右括号的时候进行抵消
            //如果右括号与最上层的相对应的话,就pop()掉
            if(res[res.length - 1] === map.get(a)){
                res.pop()
            }else{
                return false
            }
        }
    }
    if(!res.length) return true
    return false
};

复杂度分析

时间复杂度:O(n),其中 n 是字符串 s 的长度。

空间复杂度:O(n+∣Σ∣),其中 Σ 表示字符集,本题中字符串只包含 66 种括号。 6∣Σ∣=6。栈中的字符数量为 O(n),而哈希表使用的空间为 O(∣Σ∣),相加即可得到总空间复杂度。

作者:LeetCode-Solution

链接:leetcode-cn.com/problems/va…

来源:力扣(LeetCode)

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

最后


这是我2022年分享的「leetcode」第NO.9篇文章。