package com.interview.algorithms.string; import java.util.ArrayList; import java.util.List; /** * Created_By: stefanie * Date: 14-11-10 * Time: 下午3:43 */ public class C11_37A_PalindromePartition { public static List<List<String>> partition(String s) { List<List<String>> sols = new ArrayList<>(); if(s == null || s.length() == 0) return sols; List<String> parts = new ArrayList<String>(); partition(s, 0, parts, sols); return sols; } private static void partition(String s, int offset, List<String> parts, List<List<String>> sols){ if(offset == s.length()){ sols.add(new ArrayList<String>(parts)); return; } for(int i = offset + 1; i <= s.length(); i++){ String current = s.substring(offset, i); if(!isPalindrome(current)) continue; parts.add(current); partition(s, i, parts, sols); parts.remove(parts.size() - 1); //delete current } } private static boolean isPalindrome(String s){ int low = 0; int high = s.length() - 1; while(low < high){ if(s.charAt(low) != s.charAt(high)) return false; low ++; high--; } return true; } }