The hard parts are … go program it… recursive… don't be afraid!!! Second small part is the temp is null, means that the entire String are palindrome, so the result should attach the verified String and return… Need to know that even one letter is palindrome, so null means i is at the end of the String… and all String is Palindrome… so add it to result and return!!!!
public class Solution {
public ArrayList<ArrayList<String>> partition(String s) {
if(s == null){
return new ArrayList<ArrayList<String>>();
}
return partitionString(s);
}
private ArrayList<ArrayList<String>> partitionString(String input){
if(input == null){
return null;
}
ArrayList<ArrayList<String>> list = new ArrayList<ArrayList<String>>();
ArrayList<ArrayList<String>> temp;
for(int i = 1; i <= input.length(); i++){
temp = new ArrayList<ArrayList<String>>();
if(isPalidrom(input.substring(0, i))){
temp = partitionString(input.substring(i, input.length()));
if(temp == null || temp.size() == 0){
ArrayList<String> newList = new ArrayList<String>();
newList.add(input.substring(0, i));
list.add(newList);
}else{
for(int j = 0; j < temp.size(); j++){
temp.get(j).add(0,input.substring(0, i));
list.add(temp.get(j));
}
}
}
}
return (list.size() > 0)? list:null;
}
private boolean isPalidrom(String input){
if(input == null || input.length() == 0 || input.length() == 1){
return true;
}
int begin = 0;
int end = input.length() - 1;
while(begin < end){
if(input.charAt(begin) != input.charAt(end)){
return false;
}else{
begin++;
end--;
}
}
return true;
}
}
没有评论:
发表评论