代码
private List<List<String>> res = new ArrayList<>();
public List<List<String>> partition(String s) {
if(s.length()==0)
return res;
backtrack(s,new ArrayList<String>(),0);
return res;
}
private void backtrack(String s, List<String> path, int start) {
if (s.length() == start) {
res.add(new ArrayList<>(path));
return;
}
for (int i = start; i < s.length(); i++) {
if (isPal(s, start, i)) {
path.add(s.substring(start, i + 1));
backtrack(s, path, i + 1);
path.remove(path.size() - 1);
}
}
}
private boolean isPal(String s, int start, int end) {
while (start < end) {
if (s.charAt(start) != s.charAt(end))
return false;
start++;
end--;
}
return true;
}