LeetCode之使括号有效的最少添加

1.题目链接

https://leetcode.cn/problems/minimum-add-to-make-parentheses-valid

2.题目解析

我们首先细细研读题意,发现只有三种情况A是有效字符串

  • 它是一个空字符串,或者
  • 它可以被写成 AB (A 与 B 连接), 其中 A 和 B 都是有效字符串,或者
  • 它可以被写作 (A),其中 A 是有效字符串。

 此时如果我们试着从前往后遍历字符串的话,我们就可以发现如果说此时左括号‘(’数量多于右括号的话,我们可以在任意一个(不超过序列第一次左括号多于右括号)位置插入右括号,此时都可以使字符串变成有效字符串,也就是说此时可以不管的,到最后再算也无所谓。

如下面情况:

我们每次插入的位置只要是左括号多于右括号的地方就可以了

但是如果右括号比左括号数量多,我们就不能在右括号后面位置插入左括号,所以每次遇到右括号比左括号多的时候,就必须在右括号前面插入左括号以变成有效字符串。

如下面情况:

必须在右括号前面插入左括号以变成有效字符串。

3.奉上代码

class Solution {
public:
    int minAddToMakeValid(string s) {
        int sum=0;

        int l=0,r=0;

        for(int i=0;i<s.size();i++)
        {
            if(s[i]=='(')
            l++;
            else if(s[i]==')')
            {
                r++;
                if(r>l)
                {
                    sum+=1;
                    l=r;
                }
            }

        } 

        sum+=l-r;

        return sum;
    }
};

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值