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: vector<string> removeInvalidParentheses(string s) { vector<string> res; if(s.empty()){ res.push_back(s); return res; } for(int i=0;i<s.size();){ if(s[i]==')'){ string ss=s.substr(0,i); ss+=s.substr(i+1,s.size()-i-1+1); s=ss; } //return false; else if(s[i]=='('){ break; } else i++; } for(int i=s.size()-1;i>=0;){ if(s[i]=='('){ string ss=s.substr(0,i); ss+=s.substr(i+1,s.size()-i-1+1); s=ss; } //return false; else if(s[i]==')') break; else i--; } int c_left=0,c_right=0; for(int i=0;i<s.size();i++){ if(s[i]==')'){ c_right++; } else if(s[i]=='('){ c_left++; } } int dif=c_left-c_right; if(dif==0){ res.push_back(s); return res; } else if(dif>0){ bool first=false; bool adj=false; for(int i=0;i<s.size();i++){ if(first==false&&s[i]=='('){ first=true; } else if(s[i]==')'){ adj=false; } else if(s[i]=='('&&adj==false){ string ss=s.substr(0,i); ss+=s.substr(i+1,s.size()-i-1+1); res.push_back(ss); adj=true; } } return res; } else if(dif<0){ bool first=false; bool adj=false; for(int i=s.size()-1;i>=0;i--){ if(first==false&&s[i]==')'){ first=true; } else if(s[i]=='('){ adj=false; } else if(s[i]==')'&&adj==false){ string ss=s.substr(0,i); ss+=s.substr(i+1,s.size()-i-1+1); res.push_back(ss); adj=true; } } return res; } res.push_back(s); return res; } };