每日一题(五七)给定一个只包含 (,{,[,),},] 的字符串,判断字符串是否是有效字符串需要满足

给定一个只包含 "(","{","[",")","}","]" 的字符串,判断字符串是否是有效字符串需要满足:

1、左括号必须用相同类型的有括号闭合

2、左括号必须以正确的方式闭合

注意:空字符串被认为是有效字符串

示例1:

输入:"()"

输出:true

示例2:

输入:"()[]{}"

输出:true

示例3:

输入:"(]"

输出:false

示例4:

输入:"([)]"

输出:false

示例5:

输入:"{([])}"

输出:true

答案:

var isValid = function(s){
    let stack = [];
    let obj = {
        "(":")",
        "{":"}",
        "[":"]"
    };
    //取出字符串中的括号
    for(let i=0;i<s.length;i++){
        if(s[i]==="(" || s[i]==="{" || s[i]==="["){
            //如果是左括号则入栈
            stack.push(s[i]);
        }else{
            var key = stack.pop();
            //如果栈顶元素不相同则返回 false
            if(obj[key] !== s[i]) return false;
        }
    }

    if(!stack.length) return true;
    return false;
}

解析:

1、首先我们通过示例可以分析出什么样子的括号匹配是符合条件的:

1> 非嵌套情况:() {} []

2> 嵌套情况:{[()]}

2、然后我们将这些括号自右向左看做栈结构,右侧是栈顶,左侧是栈尾。

3、如果编译器中的括号是左括号,我们就入栈(左括号不用检查匹配),如果是右括号,就取出栈顶元素检查是否匹配

4、如果匹配则出栈,否则返回 false

猜你喜欢

转载自blog.csdn.net/MFWSCQ/article/details/106554955