前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >leetcode20:有效的括号

leetcode20:有效的括号

作者头像
贵哥的编程之路
发布2020-10-28 15:35:13
3500
发布2020-10-28 15:35:13
举报
文章被收录于专栏:用户7873631的专栏
代码语言:javascript
复制
/**
 * @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;

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/07/17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档