package com.interview.books.leetcodeoj;
import java.util.ArrayList;
import java.util.List;
/**
* Created_By: stefanie
* Date: 14-12-27
* Time: 上午11:04
*/
public class LOJ131_PalindromePartition {
//find all partition solution, using backtracing(permutation)
//to permutate all the palindrome, i in [offset + 1, s.length()], call isPalindrome(s, offset, i - 1), and create prefix
//by s.substring(offset, i), and dfs call partition(s, i, current)
//remember to delete prefix in current: current.remove(current.size() - 1);
List<List<String>> partitions;
public List<List<String>> partition(String s) {
partitions = new ArrayList();
List<String> current = new ArrayList();
partition(s, 0, current);
return partitions;
}
public void partition(String s, int offset, List<String> current){
if(offset == s.length()){
partitions.add(new ArrayList(current));
return;
}
for(int i = offset + 1; i <= s.length(); i++){
if(isPalindrome(s, offset, i - 1)){
String prefix = s.substring(offset, i);
current.add(prefix);
partition(s, i, current);
current.remove(current.size() - 1);
}
}
}
public boolean isPalindrome(String s, int start, int end){
while(start < end && s.charAt(start) == s.charAt(end)){
start++;
end--;
}
return start >= end;
}
public static void main(String[] args){
LOJ131_PalindromePartition partitioner = new LOJ131_PalindromePartition();
List<List<String>> partitions = partitioner.partition("a");
for(List<String> partition : partitions){
for(String word : partition){
System.out.print(word + ", ");
}
System.out.println();
}
}
}