描述:
给定一个字符串s,将s分割成一些子串,使每个子串都是回文串。
返回s所有可能的回文串分割方案。
样例:
给出 s = "aab"
,返回
[
["aa", "b"],
["a", "a", "b"]
]
思路:
应用递归来实现,每次从起始位置一次截取1,2...个字符长度,并且判断是否为回文串,是则进行下一步递归。
public class Solution {
/**
* @param s: A string
* @return: A list of lists of string
*/
public List<List<String>> partition(String s) {
// write your code here
List<List<String>> result = new ArrayList<List<String>>();
if(s == null){
return result;
}
List<String> temp = new ArrayList<String>();
if(s.length() == 0){
result.add(temp);
return result;
}
search(s , result , temp ,0);
return result;
}
public void search(String s , List<List<String>> result , List<String> temp , int start){
if(start == s.length()){
List<String> p = new ArrayList<String>(temp);
result.add(p);
return;
}
for(int i = start;i<s.length();i++){
if(isPartition(s.substring(start , i+1))){
temp.add(s.substring(start , i+1));
search(s , result , temp , i+1);
temp.remove(temp.size() - 1);
}
}
}
public boolean isPartition(String temp){
int i = 0;
int j = temp.length() - 1;
while(i<j){
if(temp.charAt(i) != temp.charAt(j)){
return false;
}
i++;
j--;
}
return true;
}
}