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; } }
时间: 2024-11-08 19:12:33