回溯——131.分割回文串
这个题最重要的是理解到,最后返回的结果是“分割”方法,分割出来的结果暂存:
1 (StringBuilder) sb.append(partition[i]);
只有是回文串的sb,才能加入path中,如果当前的分割方法切出来的这个子串已经不是回文串,那么在回溯树中的这个分支直接砍掉不进回溯:
1 private void backtracking(StringBuilder[] partition, int startIndex) { 2 StringBuilder sb = new StringBuilder(""); 3 for (int i = startIndex; i < partition.length; ++i) { 4 sb.append(partition[i]); 5 //只有当sb是回文串的时候,该路径才能继续向下 6 if (judge(sb)) { 7 path.add(sb.toString()); 8 // System.out.println(path.toString()); 9 if (i == partition.length-1) { 10 result.add((ArrayList) path.clone()); 11 } else { 12 backtracking(partition, i+1); 13 } 14 path.remove(path.size()-1); 15 } 16 // 当前的sb不是回文串,该分支直接放弃 17 // else { 18 // continue; 19 // } 20 } 21 }
回文串的判断:
1 private boolean judge(StringBuilder sb) { 2 int left = 0, right = sb.length()-1; 3 while (left <= right) { 4 if (sb.charAt(left++) != sb.charAt(right--)) { 5 return false; 6 } 7 } 8 return true; 9 }

浙公网安备 33010602011771号