问题:
给定一个无效的括号字符串删除最少字符使其变成有效的括号对儿所有字符串。
思想:
定义一个remove函数一共五给参数,字符串str,list集合,检查位置,删除位置,比较数组。
删除后转置加入list中,在此之前要判断是否反转过,这样的好处是始终可以对比一边的括号就行了不用反复递归。
代码:
public static List<String> geteffectivebracketPatr(String s){
if(s == null) {
return new ArrayList<String>();
}
List<String> ans = new ArrayList<>();
remove(s,0,0,ans,new char[] {'(',')'});
return ans;
}
private static void remove(String s, int checkedIndex, int deleteIndex, List<String> ans,char[] par) {
for(int count = 0, i = checkedIndex; i < s.length(); i++) {
if(s.charAt(i) == par[0]) {
count++;
}
if(s.charAt(i) == par[1]) {
count--;
}
if(count < 0) {
for(int j = deleteIndex;j <=i; j++) {
if(s.charAt(j) == par[1] &&(j == deleteIndex || s.charAt(j) != par[1])) {
remove(s.substring(0, j)+s.substring(j+1,s.length()), i, j, ans, par);
}
}
return ;
}
}
String received = new StringBuilder(s).reverse().toString();
if(par[0] == '(') {
remove(received, 0, 0, ans, new char[]{')','('});
}
else {
ans.add(received);
}
}