给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。
返回 s 所有可能的分割方案。
示例:
输入: "aab"
输出:
[
["aa","b"],
["a","a","b"]
]
1 public class Solution{ 2 List<List<String>> res=new ArrayList<>(); 3 public List<List<String>> partition(String s){ 4 DFS(s,new ArrayList<String>()); 5 return res; 6 } 7 8 private boolean isPalindrom(String s){ 9 int p1=0; 10 int p2=s.length()-1; 11 int len=(s.length()+1)/2; 12 for(int i=0;i<len;i++){ 13 if(s.charAt(p1++)!=s.charAt(p2--)) 14 return false; 15 } 16 return true; 17 } 18 19 private void DFS(String s,List<String> list){ 20 if(s.length()<1){ 21 res.add(new ArrayList<>(list)); 22 return; 23 } 24 for(int i=1;i<=s.length();i++){ 25 String str=s.substring(0,i); 26 if(isPalindrom(str)){ 27 list.add(str); 28 DFS(s.substring(i),list); 29 list.remove(list.size()-1); 30 }else{ 31 continue; 32 } 33 } 34 } 35 }