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:
- S.length <= 1000
- S only consists of ‘(’ and ‘)’ characters.
方法1: stack
思路:
Complexity
Time complexity: O(n)
Space complexity: O(n)
class Solution {
public:
int minAddToMakeValid(string S) {
if (S.empty()) return 0;
stack<int> st;
int result = 0;
for (int i = 0; i < S.size(); i++) {
if (S[i] == '(') st.push(i);
else if (st.empty()) {
result++;
continue;
}
else {
st.pop();
}
}
return result + st.size();
}
};
方法2: balance
思路:
left: 需要多少个左括号,i.e. 非法右括号的数量,right:需要多少右括号,i.e. 非法左括号的数量。
Complexity
Time complexity: O(N)
Space complexity: O(1)
int minAddToMakeValid(string S) {
int left = 0, right = 0;
for (char i : S) {
if (right == 0 && i == ')')
left++;
else
right += i == '(' ? 1 : -1;
}
return left + right;
}