这里我用了搜索,比较常规,关键有一点,你删除之前加入的值,是按索引来删除,而不是删除值,不然顺序会出错。
public class Solution {
public List<List<String>> partition(String s) {
List<List<String>>lists = new ArrayList<>();
List<String > list = new ArrayList<>();
dfs(s,lists,list,0,0);
return lists;
}
private void dfs(String s,List<List<String >>lists,List<String> list,int begin,int index){
if (begin == s.length()){
lists.add(new ArrayList<>(list));
return;
}
for (int i=begin+1;i<=s.length();i++){
String news = s.substring(begin,i);
if (isPalindrome(news)){
//则继续递归
list.add(news);
dfs(s,lists,list,i,index+1);
//这里需要注意
list.remove(index);
}
}
}
private boolean isPalindrome(String s){
int begin = 0;
int end =s.length()-1;
while (end>begin){
if (s.charAt(end--)==s.charAt(begin++));
else return false;
}
return true;
}
}