package leetCode;
import java.util.ArrayList;
public class Palindrome {
public static ArrayList<ArrayList<String>> partition(String s) {
// 根据打印出来的结果不能使用如下dp方法 ref http://www.programcreek.com/2013/12/leetcode-solution-of-longest-palindromic-substring-java/
// if(s.length()==1) return res;
// int len = s.length();
// int[][] table = new int[len][len];
// for(int L=1; L<=len; L++){
// for(int i=0; i<len-L; i++){
// int j=i+L-1;
// if(L==1){
// table[i][j]=1;
// res.add(s.substring(i,j+1));
// }else {
// table[i][j]=table[i+1][j-1];
// if(table[i][j]==1&& s.charAt(i)==s.charAt(j)){
// res.add(s.substring(i,j+1));
// }
// }
// }
// }
// return res;
ArrayList<ArrayList<String>> res = new ArrayList<ArrayList<String>>();
if(s==null) return res;
ArrayList<String> item = new ArrayList<String>();
dfs(s, 0, item, res);
return res;
}
public static void dfs(String s, int start, ArrayList<String> item, ArrayList<ArrayList<String>> res){
if(start==s.length()){
res.add(new ArrayList<String>(item));
return;
}
for(int i=start; i<s.length(); i++){ // 狗狗给分析说必须在每一个i 的loop中,item list都为空,所以下面一层if loop,都要remove掉新加进来的东西
if(isPalindrome(s.substring(start,i+1))){ // substring end is exclusive!
item.add(s.substring(start,i+1));
dfs(s,i+1,item, res);
item.remove(item.size()-1); // 一直以来不大领会这个remove
}
}
}
public static boolean isPalindrome(String str){
int low =0;
int high = str.length()-1;
while(low<high){
if(str.charAt(low)!=str.charAt(high)){
return false;
}
low++;
high--;
}
return true;
}
public static void main(String[] args) {
System.out.println(partition("aab"));
}
}
import java.util.ArrayList;
public class Palindrome {
public static ArrayList<ArrayList<String>> partition(String s) {
// 根据打印出来的结果不能使用如下dp方法 ref http://www.programcreek.com/2013/12/leetcode-solution-of-longest-palindromic-substring-java/
// if(s.length()==1) return res;
// int len = s.length();
// int[][] table = new int[len][len];
// for(int L=1; L<=len; L++){
// for(int i=0; i<len-L; i++){
// int j=i+L-1;
// if(L==1){
// table[i][j]=1;
// res.add(s.substring(i,j+1));
// }else {
// table[i][j]=table[i+1][j-1];
// if(table[i][j]==1&& s.charAt(i)==s.charAt(j)){
// res.add(s.substring(i,j+1));
// }
// }
// }
// }
// return res;
ArrayList<ArrayList<String>> res = new ArrayList<ArrayList<String>>();
if(s==null) return res;
ArrayList<String> item = new ArrayList<String>();
dfs(s, 0, item, res);
return res;
}
public static void dfs(String s, int start, ArrayList<String> item, ArrayList<ArrayList<String>> res){
if(start==s.length()){
res.add(new ArrayList<String>(item));
return;
}
for(int i=start; i<s.length(); i++){ // 狗狗给分析说必须在每一个i 的loop中,item list都为空,所以下面一层if loop,都要remove掉新加进来的东西
if(isPalindrome(s.substring(start,i+1))){ // substring end is exclusive!
item.add(s.substring(start,i+1));
dfs(s,i+1,item, res);
item.remove(item.size()-1); // 一直以来不大领会这个remove
}
}
}
public static boolean isPalindrome(String str){
int low =0;
int high = str.length()-1;
while(low<high){
if(str.charAt(low)!=str.charAt(high)){
return false;
}
low++;
high--;
}
return true;
}
public static void main(String[] args) {
System.out.println(partition("aab"));
}
}