leetcode20:有效括号匹配

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

有效字符串需满足:

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。

注意空字符串可被认为是有效字符串。

示例 1:

输入: “()”
输出: true

示例 2:

输入: “()[]{}”
输出: true

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

先上代码吧:


    public boolean isValid(String s) {
    	//运用Map存储括号匹配
    	Map<Character,Character> mp = new HashMap<Character,Character>();
        if(s==null||s.length()==0)
        {
        	return true;
        }
        //这一步有没有都行,后面isEmpty()可以判断出,但是有了,当为奇数个字符时,可以直接得出判断
        if(s.length()%2!=0)
        {
        	return false;
        }
        
        mp.put(')', '(');
        mp.put(']', '[');
        mp.put('}', '{');
        Stack<Character> stack = new Stack<Character>();
        //便利所给的字符串
        for(int i=0;i<s.length();i++)
        {
        	char c = s.charAt(i);
        	//很好的一个地方:运用map的contains方法直接判断是否是右括号
        	if(mp.containsKey(c)) {
        		//右括号的情况,栈空直接返回错误
        		if(stack.empty()) { return false;
        		}else {
        			//从栈中取出元素
        		char to = stack.pop();
        		//左右括号匹配
        		if(to!=mp.get(c))
        		{
        			return false;
        		}
	        }
	    }else {
	    	//左括号情况
	    	stack.add(c);
	    }
	}
        return stack.isEmpty();
	}

括号匹配问题是典型的数据结构中栈的问题,主要就是入栈出栈问题

卡壳地方

在一开始最终只是return true,只考虑到如果没有出现不匹配的即为正确,但给出 (( 的时候过不去,后来发现,如果最终栈中还有没有取出的元素即为失败,更改为 stack.isEmpty(); 正确

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值