Given a string s, partition s such that every substring of the partition is a palindrome.
Return all possible palindrome partitioning of s.
For example, given s = "aab"
,
Return
[ ["aa","b"], ["a","a","b"] ]
将给定字符串进行分解 使每一个分部都是回文结构 要求给出所有可能的组合
典型的回溯法求解 每次从第index位开始拆分 i=(index,s.length()-1) 若index-i位满足回文结构 则从第i+1位继续递归 需要注意的是 结束条件可以是index=s.length()即所有位都拆分完毕 代码如下:
public class Solution {
public List<List<String>> partition(String s) {
List<List<String>> res=new ArrayList<List<String>>();
List<String> tmp=new ArrayList<String>();
part(res, s, tmp, 0);
return res;
}
public void part( List<List<String>> res,String s,List<String> tmp,int index){
if(index==s.length()){
res.add(tmp);
return;
}
for(int i=index;i<s.length();i++){
if(isPalindrome(s, index, i)){
List<String> ntmp=new ArrayList<String>();
ntmp.addAll(tmp);
ntmp.add(s.substring(index,i+1));
part(res, s, ntmp, i+1);
}
}
}
public boolean isPalindrome(String s,int start,int end){
for(int i=0;i<(end-start+1)/2;i++){
if(s.charAt(i+start)!=s.charAt(end-i)){
return false;
}
}
return true;
}
}