首页 未命名正文

leetcode20:有效的括号:懂?

访客 未命名 2020-07-28 11:21:51 22 0 括号有效



/** * @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;

版权声明

旭日软件园-提供免费小软件下载,电脑教程和QQ表情包下载为主要宗旨.同时有网站运营,
编程教程,网页特效,手机教程,游戏攻略和IT资讯等内容,打造常用软件下载、内容丰富的站长学习!

本文链接:http://www.webmaster5u.com/%E6%9C%AA%E5%91%BD%E5%90%8D/436.html

评论