List<List<String>> res = newArrayList<>(); LinkedList<String> path = newLinkedList<>(); public List<List<String>> partition(String s) { backtracking(s, 0); return res; }
privatevoidbacktracking(String s, int startIdx) { if (startIdx >= s.length()) { // base case,走到叶子节点 // 即整个 s 被成功分割为若干个回文子串,记下答案 res.add(newLinkedList<>(path)); return; }
for (inti= startIdx; i < s.length(); i++) { Stringcur= s.substring(startIdx, i + 1); if (isPalindrome(cur)) { // s[start..i] 是一个回文串,可以进行分割 // 做选择,把 s[start..i] 放入路径列表中 path.add(cur); } else { continue; } backtracking(s, i + 1); path.removeLast(); } }
privatebooleanisPalindrome(String str) { ints=0, e = str.length() - 1; while (s < e) { if (str.charAt(s) != str.charAt(e)) { returnfalse; } s++; e--; } returntrue; } }