leetcode20 Valid Parentheses

文章讲述了在解决括号验证问题时,从最初的计数法思路遇到的问题,即不能处理严格匹配的情况,进而转向使用栈数据结构来实现严格匹配的解决方案。代码示例展示了两种方法,一种基于计数,另一种基于栈,强调了栈在处理此类问题中的优势。
摘要由CSDN通过智能技术生成

easy list的第二题是括号验证,最开始我想到的是计数法,比如左括号右括号,然后左右相加模2为0,这样就可以判断出来括号是否匹配了。

这个逻辑很简单,代码如下

 public boolean isValid(String s) {
        System.out.println(s.length());
        if(s.length()<2){
            return false;
        }
        int leftSmallBracket=0, rightSmallBracket=0, leftMidBracket=0, rightMidBracket=0, leftLargeBracket=0, rightLargeBracket=0;
        for(int i=s.length()-1;i>=0;i--){
            switch(s.charAt(i)) {
                case '(':
                    leftSmallBracket++;
                    break;
                case ')':
                    rightSmallBracket++;
                    break;
                case '[':
                    leftMidBracket++;
                    break;
                case ']':
                    rightMidBracket++;
                    break;
                case '{':
                    leftLargeBracket++;
                    break;
                case '}':
                    rightLargeBracket++;
                    break;
            }
        }
        if(leftSmallBracket!=rightSmallBracket || leftMidBracket!=rightMidBracket || leftLargeBracket!=rightLargeBracket){
            return false;
        }
        return true;
    }

但是这个代码在测试用例([])失败了,看起来必须是“严格”匹配也就是只能是()[]这样,所以还是用栈这个数据结构最合适。然后使用栈可以写出如下

public boolean isValid1(String s) {
        Stack<Character> stack = new Stack<>();
        if(s.length()<2){
            return false;
        }
        for(int i=s.length()-1;i>=0;i--){
            char c = s.charAt(i);
            if(c==')'||c==']'||c=='}'){
                stack.push(c);
            }
            else if(stack.isEmpty()){
                return false;
            }else if((stack.peek().equals(')')&&c=='(') || (stack.peek().equals(']')&&c=='[') || (stack.peek().equals('}')&&c=='{')){
                stack.pop();
            }else{
                return false;
            }
        }
        return stack.isEmpty();
    }

这个其实也不难,因为严格匹配所以限定的很死,不过最后一个else需要注意,我刚开始没写然后会有一些错误比如([{)这种其实也能通过。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值