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"] ]
backtracking,验证每个substring是否是palindrome,如果是的话切割这个substring放入list, 进入下一个递归。
public class Solution {
public ArrayList<ArrayList<String>> partition(String s) {
ArrayList<ArrayList<String>> totalList = new ArrayList<>();
if(s.isEmpty()) return totalList;
ArrayList<String> subList = new ArrayList<>();
partitionHelper(s,0,subList,totalList);
return totalList;
}
private void partitionHelper(String s, int index, ArrayList<String> subList, ArrayList<ArrayList<String>> totalList){
if(index == s.length()){
ArrayList<String> copy = new ArrayList<>(subList);
totalList.add(copy);
return;
}
for(int i = index+1; i < s.length()+1; i++){
String sub = s.substring(index,i);
if(isPalindrome(sub)){
subList.add(sub);
partitionHelper(s,i,subList,totalList);
subList.remove(subList.size()-1);
}
}
}
private boolean isPalindrome(String s){
int start = 0, end = s.length()-1;
while(start < end){
if(s.charAt(start)!=s.charAt(end)) return false;
start++;
end--;
}
return true;
}
}