Leetcode #20 Valid Parentheses 括号验证 解题小节

1 题目理解

这道题,做的事情就是匹配{} [] ()等括号的工作,检查其是否合法。
其实所谓的合法就是:有几个左边的,就有几个右边的,只要左括号的出现和右括号出现的次数一样。。。并且左边的一定比右边的先出现。。

所以做法就是:
1、设置六个变量或者使用数组,分别记录这三类括号的左边,和右边出现的频率,遇到左边的就+1,右边也是对应的+1。
2、在遍历的过程中,每对括号右边的计数不能大于左边的,不然就不合法了
3、遍历完成后,每一对括号的左右边数量要一致。

2 原题

Valid Parentheses
Given a string containing just the characters ‘(‘, ‘)’, ‘{‘, ‘}’, ‘[’ and ‘]’, determine if the input string is valid.

The brackets must close in the correct order, “()” and “()[]{}” are all valid but “(]” and “([)]” are not.

3 AC解

public class Solution {
    public boolean isValid(String s) {
        char[] chars=s.toCharArray();
        char tmp;
        Stack<Character> stack=new Stack<Character>();
        for(int i=0;i<chars.length;i++){
            if(chars[i]=='(' || chars[i]=='[' ||chars[i]=='{'){
                stack.push(chars[i]);
            } else{
                if(stack.isEmpty()){
                    return false;
                }
                tmp=stack.pop();
                //从asic上看不超过2其差距
                if(tmp-chars[i]>2 || tmp-chars[i]<-2 )
                    return false;
            }
        }
        if(stack.isEmpty()){
            return true;
        }
        else return false;


    }
}

PS:做这道题时,我还不太理解leetcode规则,看到运行时间太慢,以为是我的代码有问题,所以做了一些奇怪的改进,如判断左右括号。。
后面发现是因为我白板写代码时使用了printf,提交时没删除。。现在速度是正常的了~~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值