以左括号为基准看需要多少右括号,如果右括号比左括号多了就补上左括号的数量。从代码中体现就是:只要出现一个左括号,就说明期望出现右括号的数加1;只要出现一个右括号,期望出现右括号的数就减1。如果期望值减到了负数,就说明左括号比右括号少了,要补上左括号的值。
class Solution {
public:
int minAddToMakeValid(string s) {
int res = 0, need = 0;
for (int i = 0; i < s.size(); i++)
{
if (s[i] == '(')
need++;
if (s[i] == ')')
{
need--;
if (need < 0)
{
need = 0;
res++;
}
}
}
return res + need;
}
};