[LeetCode20.有效的括号] | 刷题打卡

86 阅读1分钟

题目描述:

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

有效字符串需满足:

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

示例:

输入:s = "()"
输出:true

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

输入:s = "(]"
输出:false

输入:s = "([)]"
输出:false

输入:s = "{[]}"
输出:true

方法分析:

使用堆栈以及字典,空间复杂度 O(n), 时间复杂度 O(n)

解法:

/**
 * @param {string} s
 * @return {boolean}
 */
var isValid = function(s) {
    if( s.length % 2 === 1) return false
    let stack = []
    let map = new Map()
    map.set('(', ')')
    map.set('{', '}')
    map.set('[', ']')
    
    for(let i=0; i<s.length; i++){
        let t = s[i]
        if(map.has(t)){
            stack.push(t)
        }else{
            let a = stack[stack.length - 1]
            if(map.get(a) === t) stack.pop()
            else return false
        }
    }
    return stack.length === 0
};

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