1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| class Solution { public: vector<string> removeInvalidParentheses(string s) { remove(s, 0, 0, '(', ')'); return res; }
void remove(const string &s, int sb, int rb, char lp, char rp) { if (int i = search(s, sb, lp, rp); i == s.length()) { string t(rbegin(s), rend(s)); if (lp == '(') { remove(t, 0, 0, rp, lp); } else { res.push_back(t); } } else { for (int j = rb; j <= i; ++j) { if (s[j] == rp && (j == rb || s[j] != s[j - 1])) { remove(s.substr(0, j) + s.substr(j + 1), i, j, lp, rp); } } } }
int search(const string &s, int b, char lp, char rp) { int i = b; for (int cnt = 0; i < s.length(); ++i) { cnt += (s[i] == rp) ? -1 : (s[i] == lp); if (cnt < 0) break; } return i; }
vector<string> res; };
|