class Solution {
// 存放结果
List<List<String>> res = new ArrayList<>();
// 暂存
List<String> path = new ArrayList<>();
public List<List<String>> partition(String s) {
backTracking(s,0);
return res;
}
public void backTracking(String s,int startIndex){
// startIndex相当于分割线,当移动到字符串末尾时,代表结束
// a|a|b| aa|b
if(startIndex == s.length()){
res.add(new ArrayList<>(path));
return;
}
for(int i=startIndex; i<s.length(); i++){
// 判断当前截的字串是否为回文字串,如果是就暂存到path中
if(change(s,startIndex,i)){
path.add(s.substring(startIndex,i+1));
// 如果不是,直接略过,截取下一个字串
}else{
continue;
}
// 递归
backTracking(s,i+1);
// 回溯
path.remove(path.size()-1);
}
}
// 判断一个字符串是否为回文字串
public boolean change(String s,int left,int right){
for(int i=left,j=right; i<j; i++,j--){
if(s.charAt(i) != s.charAt(j)){
return false;
}
}
return true;
}
}
运行结果: