注意题目要求:一个左括号要对应连续的两个右括号。当遇到左括号,对右括号的需求就加2,要是左括号是奇数个,说明前一个左括号对应奇数个右括号,此时必须插入一个右括号。遇到右括号期望值减1,要是减到-1表明多了一个右括号,此时必须增加一个左括号,同时让期望值变为1(已经减去当前这个右括号了)。
class Solution {
public:
int minInsertions(string s) {
int res = 0, need = 0;
for (int i = 0; i < s.size(); i++)
{
if (s[i] == '(')
{
need += 2;
if (need % 2 == 1)
{
res++;
need--;
}
}
if (s[i] == ')')
{
need--;
if (need < 0)
{
res++;
need = 1;
}
}
}
return res + need;
}
};