您当前的位置: 首页 >  leetcode

暂无认证

  • 4浏览

    0关注

    92582博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

leetcode20:有效的括号

发布时间:2020-07-17 23:32:28 ,浏览量:4

/**
 * @param {string} s
 * @return {boolean}
 */ var isValid = function(s) { if(s.length%2===1)//如果输入的字符为偶数的话,就算了 { return false; } const stack=[];//创建栈 for(let i=0;i<s.length;i+=1)//遍历栈 { const c=s[i];//拿到了字符串的字符 if(c==='('||c==='['||c==='{')//如果是小中大括号的话,进栈 {//遇到左括号 stack.push(c);//进 } else//要出栈的地方右括号 {//判断右括号与栈顶元素匹配 const t=stack[stack.length-1];//栈顶,先看看栈顶,然后是 if((t==='('&&c===')')||(t==='['&&c===']')||(t==='{'&&c==='}'))//看看栈顶是否与 { stack.pop(); } else { return false; } } } return stack.length===0;//栈空就不会false了 }; 

规律:如果在只有左括号的情况下,如果要闭合的话,越靠后的左括号对应的右括号就越靠前。越靠前的左括号对应的右括号就越靠后。 {[]}

解题步骤: 问题? 为什么要用栈解决? 核心:越靠后的左括号对应的右括号就越靠前。越靠前的左括号对应的右括号就越靠后。 因为比如{[]}的话,左大括号在最前面,但是却是最后一位出来的。 左中括号在前面,右中括号却是先出来的。

新建一个栈? 为什么,因为还没有栈呢,没有用什么啊。 扫描字符串,为什么? 因为不扫描做什么啊。 栈顶? 数组的最后一位。 如果右括号与栈顶(最后一位)匹配?什么意思? 记住哈,栈顶是进入栈的最后一位啊,也就是最前面的把,也可以叫做左括号把,与右括号匹配就行,不然不合法。如果最后栈空了就代表全部匹配完成就行,不然不行的。 核心是:越靠后的左括号对应的右括号就越靠前。越靠前的左括号对应的右括号就越靠后。 比如是这样的啊。 问题? 如果字符数是偶数还能判断吗? 不能,为什么,因为不能完全匹配就是false的. if(s.length%2=1)//如果输入的字符为偶数的话,就算了 { return false; }

问题? 第一先什么? 先遍历,然后是获取所有的字符,。 进栈的是什么? 左括号。 右括号要进栈吗? 不需要,为什么,因为他只是用来匹配用的啊. 不需要进栈。 而且代码中没有代码是进栈的啊。 栈顶是什么? 最后一位数组,那是什么? 是栈开头的哪一个. 也就是左括号. 问题: c为什么是右括号? 因为c代表了所有的字符,而且c中的所有的左括号都入栈了,只剩下右括号了啊 if((t===’(’&&c===’)’)||(t===’[’&&c===’]’)||(t===’{’&&c===’}’))//看看栈顶是否与左括号匹配, { stack.pop(); } 什么意思? 如果栈顶与右括号匹配就出栈.也即是说开头的与从什么开始的右括号匹配就欧克了。 i=0开始length-1结束。 如果没有匹配的就false。 如果字符里没有字符的话,就说明length为0;

关注
打赏
1653961664
查看更多评论
立即登录/注册

微信扫码登录

0.3499s