题目:
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 List<String> removeInvalidParentheses(String s) {
List<String> ans=new ArrayList<>();
if(s==null) return ans;
remove(s,ans,0,0,new char[]{'(',')'});
return ans;
}
public void remove(String s,List<String> ans,int begin,int last,char[] par){
int counter=0;
for(int i=begin;i<s.length();i++){
if(s.charAt(i)==par[0]) counter++;
if(s.charAt(i)==par[1]) counter--;
if(counter>=0) continue;
for(int j=last;j<=i;j++){
if(s.charAt(j)==par[1]&&(j==last||s.charAt(j-1)!=par[1]))
remove(s.substring(0,j)+s.substring(j+1,s.length()),ans,i,j,par);
}
return;
}
if(counter==0&&par[0]=='(')
ans.add(s);
else if(counter==0&&par[0]==')')
ans.add(new StringBuffer(s).reverse().toString());
else{
String reverse=new StringBuffer(s).reverse().toString();
remove(reverse,ans,0,0,new char[]{')','('});
}
}
}