分割回文串

给定一个字符串 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 }