class Solution { public: vector<string> removeInvalidParentheses(string s) { unordered_set<string> ret; int left = 0; int right = 0; for (char c : s) { if (c == '(') left++; if (c == ')') { if (left) left--; else right++; } } helper(s, 0, left, right, 0, "", ret); return vector<string>(ret.begin(), ret.end()); } void (string s, int index, int left, int right, int pair, string path, unordered_set<string> &ret) { if (index == s.size()) { if (left == 0 && right == 0 && pair == 0) { ret.insert(path); } return; } if (s[index] != '(' && s[index] != ')') { helper(s, index+1, left, right, pair, path+s[index], ret); } else { if (s[index] == '(') { if (left) { helper(s, index+1, left-1, right, pair, path, ret); } helper(s, index+1, left, right, pair+1, path+s[index], ret); } if (s[index] == ')') { if (right) { helper(s, index+1, left, right-1, pair, path, ret); } if (pair) { helper(s, index+1, left, right, pair-1, path+s[index], ret); } } } } };
|
近期评论