https://oj.leetcode.com/problems/palindrome-partitioning/
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"] ]
这是一个动态规划问题,list[i]表示从0到i的字符串中的所有分割方式,缺点是空间占用比较多。
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class Solution {
List<List<String>> partition(String s){
int n = s.length();
boolean[][] PalindromePair = new boolean [n][n];
ArrayList<String> arrayList = new ArrayList ();
List<List<String>>list[] = new LinkedList[n];
for(int i=0;i<n;i++){
PalindromePair[i][i] = true;
}
arrayList.add(s.substring(0,1));
list[0]=new LinkedList<List<String>>();
list[0].add(arrayList);
for(int i=1; i<n; i++){
list[i] = new LinkedList<List<String>>();
for(int j=0; j<=i; j++){
if(s.charAt(j)==s.charAt(i)&&((i-j)<2||PalindromePair[j+1][i-1])){
PalindromePair[j][i] = true;
if(j==0){
ArrayList<String>tempArrayList = new ArrayList<String>();
tempArrayList.add(s.substring(0,i+1));
list[i].add(tempArrayList);
}
else{
for(int u=0; u< list[j-1].size();u++){
ArrayList<String>tempArrayList = new ArrayList<String>();
tempArrayList.addAll(list[j-1].get(u));
tempArrayList.add(s.substring(j,i+1));
list[i].add(tempArrayList);
}
}
}
}
}
return list[n-1];
}
public static void main(String[]args){
Solution solution = new Solution();
String string = new String("efe");
List<List<String>> list = solution.partition(string);
for (List<String> list2 : list) {
System.out.println(list2);
}
}
}