原题题目
代码实现(首刷自解 128ms 未优化 之后有时间再优化优化 感觉面试想出来优化的也不是很多 🕊一下 二刷必优化)
class Solution {
public:
int mindel = INT_MAX;
void backtracking(unordered_set<string>& set,vector<string>& ret,const string& s,string& temp,int left,int del,int pos,int size)
{
if(pos == s.size())
{
if(!left && del <= mindel)
{
if(del < mindel) ret.clear();
auto it = set.find(temp);
if(it == set.end()) ret.emplace_back(temp);
set.emplace(temp);
mindel = min(mindel,del);
}
return;
}
if(s[pos] == ')')
{
if(!left) backtracking(set,ret,s,temp,left,del+1,pos+1,size);
else
{
if(left > 0)
{
temp+=')';
backtracking(set,ret,s,temp,left-1,del,pos+1,size+1);
}
temp = temp.substr(0,size);
backtracking(set,ret,s,temp,left,del+1,pos+1,size);
}
}
else if(s[pos] == '(')
{
temp += '(';
backtracking(set,ret,s,temp,left+1,del,pos+1,size+1);
temp = temp.substr(0,size);
backtracking(set,ret,s,temp,left,del+1,pos+1,size);
}
else backtracking(set,ret,s,(temp+=s[pos]),left,del,pos+1,size+1);
}
vector<string> removeInvalidParentheses(string s) {
unordered_set<string> set;
vector<string> ret;
string temp;
backtracking(set,ret,s,temp,0,0,0,0);
return ret;
}
};