LeetCode 第301题
朴实无华的递归~
class Solution {
Set<String> set = new HashSet<String>();
int resLen = 0;
int leftCount = 0;
int rightCount = 0;
public List<String> removeInvalidParentheses(String s) {
int length = s.length();
int count = 0;
for(int i = 0; i < length; i++) {
Character charAt = s.charAt(i);
if(charAt.equals('(')) {
count++;
}else if(charAt.equals(')')){
if(count == 0) {
rightCount++;
}else {
count--;
}
}
}
leftCount = count;
resLen = length-leftCount-rightCount;
StringBuilder sb = new StringBuilder();
dfs(s, 0, 0, 0, sb, 0, 0);
return new ArrayList<>(set);
}
public void dfs(String str, int left, int right, int index, StringBuilder sb, int countleft, int countright) {
if(left > leftCount || right > rightCount) {
return;
}
if(countright > countleft) {
return;
}
if(sb.length() > resLen) {
return;
}
if(index > str.length()) {
return;
}
if(sb.length() == resLen && left == leftCount && right == rightCount) {
set.add(sb.toString());
return;
}
Character charAt = str.charAt(index);
if (charAt.equals('(')) {
dfs(str, left+1, right, index+1, sb, countleft, countright);
}
if (charAt.equals('(')) {
sb.append(charAt);
dfs(str, left, right, index+1, sb, countleft+1, countright);
sb.delete(sb.length()-1, sb.length());
}
if(charAt.equals(')')) {
dfs(str, left, right+1, index+1, sb, countleft, countright);
}
if (charAt.equals(')')) {
sb.append(charAt);
dfs(str, left, right, index+1, sb, countleft, countright+1);
sb.delete(sb.length()-1, sb.length());
}
if(!charAt.equals(')') && !charAt.equals('(')) {
sb.append(charAt);
dfs(str, left, right, index+1, sb, countleft, countright);
sb.delete(sb.length()-1, sb.length());
}
}
}