关键:
1.为什么使用 BFS而不是 DFS
BFS要比 DFS简单得多,因为这个问题涉及删除最少的括号,看一下在每次删除一个括号之后,是不是合法的,如果已经合法了,那么我们就不必再继续删除啊。所以我们不必把这一遍进行到底,而是一层一层的深入,一旦满足了,就不再深入。
2.利用set去重
class Solution {
public:
bool check(string s){
vector<char> vec;
for (int i =0;i<s.size();i++){
if (s[i]=='('){
vec.push_back('(');
}
else if (s[i]==')'){
if (vec.empty()){
return false;
}
vec.pop_back();
}
}
return vec.empty();
}
vector<string> removeInvalidParentheses(string s) {
vector<string> ans;
queue<string> que;
bool flag=false;
que.push(s);
while(!que.empty()){
if (flag)
break;
int len=que.size();
set<string> str;
while (len--){
string cur=que.front();
if (check(cur)){
ans.push_back(cur);
flag=true;
}
for (int i =0;i<cur.size();i++){
if (s[i]=='('||s[i]==')'){
string temp=cur.substr(0,i)+cur.substr(i+1,cur.size()-i-1);
if (str.find(temp)==str.end()){
str.insert(temp);
que.push(temp);
}
}
}
que.pop();
}
}
return ans;
}
};