括号字符串的有效性和最长有效长度

【题目】
1.给定一个str,判断是不是整体有效的括号字符串
2.返回最长的有效括号字串长度

【示例】

    public static void main(String[] args) {
        String s="()";
        System.out.println(isValid(s));//true
        s="(()))";
        System.out.println(isValid(s));//false
        s="()a()";
        System.out.println(isValid(s));//false

        System.out.println(maxLength("(()())"));//6
    }

【代码】

//判断是否是有效的括号字符串
    public static boolean isValid(String str){
        if(str==null||str.equals("")){
            return false;
        }
        char[] chas=str.toCharArray();
        int status=0;
        for(int i=0;i<chas.length;i++){
            if(chas[i]!='('&&chas[i]!=')'){
                return false;//如果遇到非括号字符,false
            }
            if(chas[i]=='('){
                status++;//记录此时(的个数
            }
            if(chas[i]==')' && --status<0){
                return false;//遇到一个)减一个(,如果不够减了,说明此时右括号多于左括号,false
            }
        }
        return status==0;//最后 左右括号数应该同,status应该刚好减成了0
    }

    //判断是否是有效的括号字符串进阶:返回最长有效字符串长度
        public static int maxLength(String str){
            if(str==null||str.equals("")){
                return 0;
            }
            char[] chas=str.toCharArray();
            int[] dp=new int[chas.length]; 
            int pre=0;//一个下标
            int res=0;//记录结果
            for(int i=1;i<chas.length;i++){ 
                if(chas[i]==')'){
                    pre=i-dp[i-1]-1;
                    if(pre>=0 && chas[pre]=='('){//判断chas[pre]和chas[i]能不能配一对括号
                        dp[i]=dp[i-1]+2+(pre>0?dp[pre-1]:0);
                    }
                }
                res=Math.max(res, dp[i]);
            }
            return res;
        }
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值