题目:
Remove the minimum number of invalid parentheses in order to make the input string valid. Return all possible results.
Note: The input string may contain letters other than the parentheses (
and )
.
Example 1:
Input: "()())()"
Output: ["()()()", "(())()"]
Example 2:
Input: "(a)())()"
Output: ["(a)()()", "(a())()"]
Example 3:
Input: ")("
Output: [""]
代码:
class Solution {
public:
int le = 0;
int ri = 0;
bool isValid(string t) {
int cnt = 0;
for (int i = 0; i < t.size(); ++i) {
if (t[i] == '(') ++cnt;
else if (t[i] == ')' && --cnt < 0) return false;
}
return cnt == 0;
}
void helper(string text,string& s, int i, vector<string>& res) {
if (i>=s.length()) {
if (le==0&&ri==0&&isValid(text)) {
res.push_back(text);
}
return;
}
if (s[i] == '(') {
if (le != 0) {
le--;
helper(text, s, i + 1, res);
le++;
}
helper(text + '(', s, i + 1, res);
}
else if (s[i] == ')') {
if (ri != 0) {
ri--;
helper(text, s, i + 1, res);
ri++;
}
helper(text + ')', s, i + 1, res);
}
else {
helper(text + s[i], s, i + 1, res);
}
}
vector<string> removeInvalidParentheses(string s) {
vector<string> res;
int len = s.length(), l = 0, r = 0;
if (len == 0)return {""};
for (int i = 0; i < len; i++) {
if (s[i] == '(')l++;
else if (s[i] == ')')l == 0 ? r++ : l--;
}
le = l;
ri = r;
helper("", s, 0, res);
sort(res.begin(), res.end());
res.erase(unique(res.begin(), res.end()), res.end());
return res;
}
};
思路:
DFS