给你一个字符串 s,请你将 _s _分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。
回文串 是正着读和反着读都一样的字符串。
分析:本题要分割成一个个回文子串,那么肯定要有一个函数来判断是否是回文子串,如参考代码最后一个函数所示,之后由于题目要返回所有可能的分割方案,那么就要只能使用回溯算法,不然就是暴力解法?
这之后使用回溯算法的套路从之前的数组变成了字符串,其实差别不大,注意在代码递归前判断一下是否当前子串是回文串即可
参考代码:
public List> partition(String s) {
sup(s,0);
return ret;
}
List> ret = new ArrayList<>();
LinkedList
private void sup(String s,int startindex){
if(startindex>=s.length()){
ret.add(new ArrayList<>(path));
return;
}
for(int i=startindex;i
if(!ispartition(s,startindex,i)){
continue;
}
path.add(s.substring(startindex,i+1));
sup(s,i+1);
path.removeLast();
}
}
private boolean ispartition(String s,int start,int end){
for(int i=start,j=end;i
}
return true;
}
