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;
}
};