O(n) time O(1) space
l和r分别表示无法匹配的左括号跟右括号的个数
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| class Solution { public: int minAddToMakeValid(string S) { int l = 0, r = 0; for (char c : S) { if (c == '(') { ++l; } else if (c == ')') { l > 0 ? --l : ++r; } } return l + r; } };
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| class Solution { public: int minAddToMakeValid(string S) { int debt = 0, balance = 0; for (char c : S) { balance += c == '(' ? 1 : -1; if (balance < 0) { ++debt; ++balance; } } return debt + balance; } };
|
stack O(n) time O(n) space
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| class Solution { public: int minAddToMakeValid(string S) { stack<char> s; for (char c : S) { if (c == ')' && !s.empty() && s.top() == '(') { s.pop(); } else { s.push(c); } } return s.size(); } };
|