题目是把一个字符串分成多个回文子串,求出所有情况。
这个题目也是比较典型的回溯法。
public class Solution {
public List<List<String>> partition(String s) {
ArrayList<List<String>> res = new ArrayList<List<String>>();
ArrayList<String> list = new ArrayList<String>();
if (s == null || s.length() == 0)
return res;
process(res,list,s);
return res;
}
private boolean isPalindrome(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;
}
private void process(ArrayList<List<String>> res, ArrayList<String> list, String str){
if (str.length() == 0)
res.add(new ArrayList<String>(list));
int len = str.length();
for (int i=1; i<=len; ++i){
String subStr = str.substring(0, i);
if (isPalindrome(subStr)){
list.add(subStr);
String restSubStr = str.substring(i);
process(res,list,restSubStr);
list.remove(list.size()-1);
}
}
}
}