括号匹配问题

题目描述

给你一个字符串中,全是左括号和右括号,所谓完整的括号就是有左括号和右括号,并且左括号必须在右括号左边,现在给你一个括号字符串,是不完整的,请你求出最少需要添加多少括号才能使该字符串变成完整字符串?

思路分析

首先,最容易想到的思路就是用一个变量,初值为0,然后,遇到左括号接加1,遇到右括号就减1,当最后不为0时,说明缺少。
但是,分析上述思路,其实只是在单纯统计左右括号的数量,并没有考虑左括号必须要在右括号左边这个条件,比如“)(”这个情况,其实是缺少两个括号的,最少需要补充一个左括号和一个右括号。
因此,初值为0的变量,当变成-1时,说明此时已经出现了缺少一个左括号的情况,并且,这种情况是和右边的数据状况无关的,无论右边有什么括号,都不能改变已经缺少一个左括号的事实了。 那是因为,本来就是从左边开始遍历的,出现负数就是左边缺少左括号,此时只能在左边添加来实现完整括号。因此,代码中,出现-1时,就是缺少一个左括号,此时结果累加1,同时,初值变量并不能真的变成-1,如果变成-1,那么后面就需要有一个左括号与之匹配,显然是不合理的。因此,当最后时,初值变量是多少,就说明需要添加多少个右括号。

代码

    public static int f1(String str){
        char[] chars=str.toCharArray();
        int index=0;
        int res=0;
        for (int i = 0; i < chars.length; i++) {
            if(chars[i]=='('){
                index++;
            }else {
                if(index==0){
                    res++;
                }else {
                    index--;
                }
            }
        }
        return res+index;
    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值