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"] ]
public class Solution { public List<List<String>> partition(String s) { ArrayList<List<String>> res = new ArrayList<List<String>>(); if(s.length()==0) return res; boolean flag[][] = new boolean[s.length()][s.length()]; for(int i=0;i<s.length();i++){ flag[i][i] = true; } for(int i=s.length()-1;i>=0;i--){ for(int j=i+1;j<s.length();j++){ if(s.charAt(i)==s.charAt(j)){ if(j-i==1){ flag[i][j] = true; }else{ flag[i][j] = flag[i+1][j-1]; } }else{ flag[i][j] = false; } } } dfs(res, flag, new ArrayList<String>(), 0, s); return res; } void dfs(ArrayList<List<String>> res,boolean[][] flag,List<String> item,int start,String s){ if(start==flag.length){ res.add(new ArrayList<String>(item)); }else{ for(int i=start+1;i<flag.length+1;i++){ if(flag[start][i-1]){ item.add(s.substring(start, i)); dfs(res, flag, item, i, s); item.remove(item.size()-1); } } } } }