一、原題
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"] ]
一、中文
找到一個字符串中所有可能的迴文子字符串的組合
三、舉例
比如字符串aab,就可以分成 "aa" "b" 和 "a" "a" "b" 兩種情況
四、思路
首先要編寫一個函數,判斷這個函數是否是迴文串,然後就可以方便的調用這個函數了。然後就是遍歷字符串了,如果字符串從0到第i個位置是一個迴文串,然後再使用遞歸的方式判斷後邊的字符串,直到字符串的長度爲0了就可以了,這個list中就是一套完整的方案了,然後將這個list裝入res集合中,依次這樣遞歸,最後返回就可以了。
五、程序
import java.util.*;
public class Solution {
public ArrayList<ArrayList<String>> partition(String s) {
ArrayList<ArrayList<String>> res = new ArrayList<>();
ArrayList<String> list = new ArrayList<>();
addPalin(res,list,s);
return res;
}
public static void addPalin(ArrayList<ArrayList<String>> result,ArrayList<String> list,String s){
//當list==0的時候也就是說明這個字符串已經按照相應的的序列分好了
//此時可以將其加進去了
if(s.length() == 0){
result.add(new ArrayList<String>(list));
}
for(int i = 1; i <= s.length(); i++){
if(!isPali(s.substring(0,i))){
continue;
}
//這裏是從下標0-(i-1)的子串
list.add(s.substring(0,i));
//這裏是從下標i開始的子串
addPalin(result,list,s.substring(i));
//這裏的移除是爲了重新裝入新的字符串
list.remove(list.size()-1);
}
}
public static boolean isPali(String str){
int i = 0;
int j = str.length()-1;
while(i < j){
if(str.charAt(i) != str.charAt(j)){
return false;
}
i++;
j--;
}
return true;
}
}