class Solution {
public List<List<String>> partition(String s) {
List<List<String>> res=new ArrayList<List<String>>();
generatePartition(0,new ArrayList<String>(),res,s);
return res;
}
private void generatePartition(int idx, List<String> list, List<List<String>> res, String s){
if(idx==s.length())
{
res.add(new ArrayList<String>(list));
return;
}
for(int i=idx;i<s.length();i++)
if(isPalindrome(idx,i,s))
{
list.add(s.substring(idx,i+1));
generatePartition(i+1,list,res,s);
list.remove(list.size()-1);
}
}
private boolean isPalindrome(int i, int j, String s){
while(i<j&&s.charAt(i)==s.charAt(j))
{
i++;
j--;
}
return i>=j;
}
}