# 921. Minimum Add to Make Parentheses Valid

Given a string `S` of `'('` and `')'` parentheses, we add the minimum number of parentheses ( `'('` or `')'`, and in any positions ) so that the resulting parentheses string is valid.

Formally, a parentheses string is valid if and only if:

• It is the empty string, or
• It can be written as `AB` (`A` concatenated with `B`), where `A` and `B` are valid strings, or
• It can be written as `(A)`, where `A` is a valid string.

Given a parentheses string, return the minimum number of parentheses we must add to make the resulting string valid.

Example 1:

``````Input: "())"
Output: 1
``````

Example 2:

``````Input: "((("
Output: 3
``````

Example 3:

``````Input: "()"
Output: 0
``````

Example 4:

``````Input: "()))(("
Output: 4
``````

Note:

1. `S.length <= 1000`
2. `S` only consists of `'('` and `')'` characters.

``````class Solution {
public:
int left = 0, right = 0;
for (char c : S) {
if (c == '(') {
++right;
} else if (right > 0) {
--right;
} else {
++left;
}
}
return left + right;
}
};
``````

``````class Solution {
public:
int res = 0, cnt = 0;
for (char c : S) {
if (c == '(') {
if (cnt < 0) {
res += abs(cnt);
cnt = 0;
}
++cnt;
} else {
--cnt;
}
}
return res + abs(cnt);
}
};
``````

Github 同步地址:

https://github.com/grandyang/leetcode/issues/921

Remove Invalid Parentheses

Longest Valid Parentheses

Generate Parentheses

Valid Parentheses