题目:求最少添加多少个括号,让括号对有效
https://leetcode.com/problems/minimum-add-to-make-parentheses-valid/description/
题意:计算要让整个括号valid的最小个数是多少
遇到左括号cnt++,统计需要右括号的个数,当cnt < 0,说明右括号多,这个时候要添加左括号了,最后把cnt加入到结果中就好了。
为什么不能从头到尾扫一遍,求左右括号的差值,因为比如())((),这个时候左右括号的差值是0,但是我其实需要添加两个括号,要维持括号的性质
cpp
class Solution {
public:
int minAddToMakeValid(string s) {
int cnt = 0;
int ret = 0;
for(int i = 0; i < s.size(); i++) {
if(s[i] == '(') {
cnt++;
}
if(s[i] == ')') {
cnt--;
}
if(cnt < 0) {
ret++;
cnt = 0;
}
}
ret += cnt;
return ret;
}
};