跟301. Remove Invalid Parentheses不完全一样
跟921. Minimum Add to Make Parentheses Valid结合起来看
O(n) time
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| class Solution { public: string minRemoveToMakeValid(string s) { s = remove(s, '(', ')'); return remove(s, ')', '('); }
string remove(const string &s, char lp, char rp) { string res; int cnt = 0; for (int n = s.length(), i = n - 1; i >= 0; --i) { cnt += s[i] == lp ? -1 : (s[i] == rp); if (cnt < 0) { cnt = 0; continue; } res += s[i]; } return res; } };
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| class Solution { public: string minRemoveToMakeValid(string s) { reverse(begin(s), end(s)); s = remove(s, ')', '('); reverse(begin(s), end(s)); return remove(s, '(', ')'); }
string remove(const string &s, char lp, char rp) { string res; int cnt = 0; for (int i = 0; i < s.length(); ++i) { cnt += s[i] == rp ? -1 : (s[i] == lp); if (cnt < 0) { cnt = 0; continue; } res += s[i]; } return res; } };
|