【为进大厂力扣刷题】8. 有效的括号

137 阅读1分钟

一、题目描述:

20. 有效的括号

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

有效字符串需满足:

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

示例 1:
输入:s = "()"
输出:true
示例 2:
输入:s = "()[]{}"
输出:true
示例 3:
输入:s = "(]"
输出:false
示例 4:
输入:s = "([)]"
输出:false
示例 5:
输入:s = "{[]}"
输出:true
提示:

1 <= s.length <= 104

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

二、思路分析:

符号完整闭合,编辑器监测都运用 的概念,左侧符号入栈,右侧符号则匹配栈最后一项,相对应即可出栈,最后栈长度为零代表成功。

解法1 栈

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

解法2 replace

加入输入正确的情况下,s长度为偶数,总会有不少于一组的闭合符号。那么循环length/2次,每次匹配闭合符号清空,最后字符串长度为0即表示成功!

var isValid = function(s) {
    let len = s.length/2
    for(let i=0; i<len; i++){
        s = s.replaceAll('()','').replaceAll('{}','').replaceAll('[]','')
    }
    return s.length === 0
};

image.png 效率好低。。。不过思路牛