题目如下:
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 )
.
Examples:
"()())()" -> ["()()()", "(())()"] "(a)())()" -> ["(a)()()", "(a())()"] ")(" -> [""]
使用宽度优先搜索解决,代码如下:
class Solution {
public:
bool judge(string s) {
int flag = 0;
for(int i = 0; i < s.size(); i++) {
if (s[i] == '(') flag++;
else if (s[i] == ')') {
if (flag > 0) flag--;
else
return false;
}
}
if (flag == 0) return true;
else
return false;
}
vector<string> removeInvalidParentheses(string s) {
vector<string> result;
queue<string> q;
q.push(s);
while(!q.empty()) {
bool flag = false;
unordered_set<string> se;
int size = q.size();
for(int i = 0; i < size; i++) {
string q0 = q.front();
if(judge(q0)) {
result.push_back(q0);
flag = true;
}
q.pop();
if(!flag) {
for(int l = 0; l < q0.size(); l++) {
if(q0[l] == '(' || q0[l] == ')') {
string t = q0.substr(0, l) + q0.substr(l + 1);
if(se.find(t) == se.end()) {
se.insert(t);
q.push(t);
}
}
}
}
}
if(flag)
return result;
}
}
};