s中的括号数肯定是一种大于另一种的,而且删除的数量肯定是固定的,所以直接广度优先,遇到一个删一个,然后加入新容器等待下一次删除即可,删除操作次数达到需要删除的数量的时候,肯定就有解了
class Solution {
public:
vector<string> removeInvalidParentheses(string s) {
vector<string> ans;
unordered_set<string> curset;
curset.emplace(s);
while(true){
for(string s:curset){
if(is_hefa(s))
ans.emplace_back(s);
}
if(ans.size()>0)
return ans;
unordered_set<string> newset;
for(string s:curset){
for(int i=0;i<s.size();++i){
if(i!=0&&s[i]==s[i-1])
continue;
if(s[i]=='('||s[i]==')'){
newset.emplace(s.substr(0,i)+s.substr(i+1));
}
}
}
curset=newset;
}
return ans;
}
bool is_hefa(const string &s){
int flag=0;
for(char c:s){
if(c=='(')
++flag;
else if(c==')')
--flag;
if(flag<0)
return false;
}
return flag==0;
}
};