【小王的算法练习】LeetCode: 20.有效的括号

【简单】 LeetCode: 20.有效的括号

今天刷了一个 LeetCode 题目,就是简单的括号匹配题目,之前用数组做过一次,这次用栈来做一下。体会一下栈的使用方法。
首先我们要知道栈的特征:后进先出,我个人喜欢把它比作一个只有一边开口的玻璃管。因为只有一端开口,所以每次从玻璃管内取东西都要取出最靠近管口的那个。

我们来看一下题目:

在这里插入图片描述
我们可以看到,这个题目的描述有点符合我们刚才所说的栈的特征:我们把所有没有被配对的括号压入栈内,每次压入前都要将栈顶的括号和即将要压入的括号作比较,如果他俩是匹配的,我们就弹出栈顶括号,不过不匹配就将这个元素压入栈中。那如果直到最后一个元素判断完毕,如果栈内是空的,那么就证明我们的字符串是括号匹配的,如果栈内还有元素则说明这个字符串是括号不匹配的。当然了,第一个括号是直接入栈的。接下来我们看看代码:

 public  boolean isValid(String s) {
 //判断是否括号匹配的函数
		 
		 Stack<Character> stack = new Stack<>();//定义一个栈
		 
		 char[] a = s.toCharArray();//将字符串转为字符数组
		 
		 int length = a.length;

		 if(length %2 !=0)//括号数量是奇数则直接返回不匹配
		  {
			 return false;
		  }
		 
		 for(char c:a)//逐个取出字符数组的元素
		 {
			 if(stack.size()==0)//空栈直接将元素入栈
			 {
				 stack.push(c);
			 }
			 else if(isOk(stack.peek(),c))//括号匹配就出栈
			 {
				 stack.pop();
			 }
			 else//不匹配就入栈
			 {
				 stack.push(c);
			 }
		 }
		 
		 return stack.size()==0;//返回栈内元素是不是=0
	        
	    }
	 private boolean isOk(char a,char b)//判断栈顶元素是不是和即将入栈元素匹配
	 {
		 if((a=='('&&b==')') ||(a=='{'&&b=='}') || (a=='['&&b==']') )
		 {
			 return true;
		 }
		 return false;
	 }

就是这样,一个简单的题目。不知道转载LeetCode的题目会不会侵权,如有侵权请联系我删除,有大佬有优化的方法也请不吝赐教。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值