题目描述
给你一个字符串 s,请你将 s 分割成一些 子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。
class Solution {
List<List<String>> res = new ArrayList<>();
List<String> path = new ArrayList<>();
void backtracking(String str, int startIndex) {
if (startIndex >= str.length()) {
res.add(new ArrayList<>(path));
return;
}
for (int i = startIndex; i < str.length(); i++) {
String substr = str.substring(startIndex, i + 1);
//要求每个子串都是回文串,不是回文串就没必要递归下去了
if (judge(substr)) {
path.add(substr);
backtracking(str, i + 1);
path.remove(path.size() - 1);
}
}
}
boolean judge(String str) {
for (int i = 0, j = str.length() - 1; i < j; i++, j--) {
if (str.charAt(i) != str.charAt(j)) {
return false;
}
}
return true;
}
public List<List<String>> partition(String s) {
backtracking(s, 0);
return res;
}
}
小结:回溯部分终于结束了,这道题不是很好理解,需要拆分的每个子串都是回文串,所以需要遍历字符串一遍,一边遍历,一边分割,一边收集,具体细节看代码吧,不想分析了。