| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 
 | public List<List<String>> partition(String s) {
 List<List<String>> list = new ArrayList<>();
 backtrack(list, new ArrayList<>(), s, 0);
 return list;
 }
 
 public void backtrack(List<List<String>> list, List<String> tempList, String s, int start){
 if(start == s.length())
 list.add(new ArrayList<>(tempList));
 else{
 for(int i = start; i < s.length(); i++){
 if(isPalindrome(s, start, i)){
 tempList.add(s.substring(start, i + 1));
 backtrack(list, tempList, s, i + 1);
 tempList.remove(tempList.size() - 1);
 }
 }
 }
 }
 
 public boolean isPalindrome(String s, int low, int high){
 while(low < high)
 if(s.charAt(low++) != s.charAt(high--)) return false;
 return true;
 }
 
 |