最好的种树是十年前,其次是现在。歌谣 每天一个前端小知识 提醒你改好好学习了 知乎博主 csdn博主 b站博主  放弃很容易但是坚持一定很酷     我是歌谣 喜欢就一键三连咯 你得点赞是对歌谣最大的鼓励

题目

给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
    左括号必须用相同类型的右括号闭合。
    左括号必须以正确的顺序闭合。
示例 1:
输入:s = "()"
输出:true
示例 2:
输入:s = "()[]{}"
输出:true
示例 3:
输入:s = "(]"
输出:false
示例 4:
输入:s = "([)]"
输出:false
示例 5:
输入:s = "{[]}"
输出:true
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-parentheses

/**
 * @param {string} s
 * @return {boolean}
 */
/*  先取出s[i],1.是左括号,入栈;
               2.是右括号,2.1若此时栈空,则出错;2.2否则出栈顶元素,并和s[i]匹配,2.2.1若成功,栈顶出栈,2.2.2.否则报错,
               3.最后判断栈是否为空 */
var isValid = function(s) {
    //字符串s的长度为奇数时,直接返回false
    if(s.length%2 ==1) return false ;

    //通过数组建立栈
    let stack = [];
    for(let i = 0;i<s.length;i++){

        let c = s[i];
        console.log(c)
        //如果为左括号就进栈
        if(c==='{' || c==='[' || c==='(') {
          stack.push(c);
        }
        else {

        //若为右括号,若栈空时,返回一个false;
        if(stack.length===0) return false ;
        //取到栈顶元素
        let s = stack[stack.length-1];
        //判断是否匹配,ruo匹配就出栈顶元素,可以不用接收返回结果
        if(s==='{'&&c==='}' || s==='['&&c===']' || s=='('&&c==')') {
            stack.pop();
        }
        else{
            return false ;
        }
     }
    }
    //遍历完所有字符串后,判断栈是否为空,若为空,即完全配对
    return stack.length ===0;

};

我是歌谣 放弃很容易 但是坚持一定很酷