LeetCode第20题

判断括号是否匹配

题目:给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。

有效字符串需满足:

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
链接:原文链接
解题思路:在求解该题目时需要确定的一点是,如果一个字符串是可以相互匹配的,则其子串一定是相互匹配的。这里利用栈对该题目进行求解。首先如果出现的是左括号,则将其放入堆栈中,如果是右括号则此时即开始做匹配,弹出栈顶在字符,若当前栈顶的字符与当前字符相互匹配,则将此字符从栈中弹出,否则直接返回false。说明此时的字符是不能匹配的,既然内部的字符都不能实现,此时也就没有必要在进行比较了,直接返回false。
代码如下:

///充分利用栈的思想进行求解,将遇到的每个字符加入到栈中,如果新加入的字符与栈中的字符相互匹配,则将这一对字符弹出
	 public static  boolean isValid(String s) /
	 {
		 HashMap<Character,Character> map = new HashMap<>();
		 map.put('}', '{');
		 map.put(']', '[');
		 map.put(')', '(');
		 Stack<Character> stack = new Stack<>();
		 for(int i=0;i<s.length();i++)
		 {
			char tmp = s.charAt(i);获得当前字符
			
			if(map.containsKey(tmp))若存在map中映射的字符说明就要进行匹配环节了
			{
				char top = stack.isEmpty() ? '#' : stack.pop();获得当前栈顶的字符,若当前栈为空则返回空字符串
				if(top!=map.get(tmp)) 判断当前字符是否匹配
				{
					return false;
				}
				
			}
			若不存在则直接将当前字符加入到栈中
			else
			{
				stack.add(tmp);
			}
			
		 }
		 return stack.isEmpty();判断当前栈是否为空,若为空说明当前字符均获得了正确的匹配,不为空说明当前字符还有没被匹配的字符
	 } 
	
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值