题意:
将字符串分割。使每个子串都是回文字符串。返回所有满足条件的分割。
分析:
这个题一眼望去就应该先把问题分解,一是判断子串是否回文。二是搜索。搜索的话,这种情况适合递归深搜。
对于回文判断:传入字符串,一头一尾,两个指针向中间遍历,并比较即可判断。
对于搜索:
我们每次递归中,应该切割字符串,如果切割下来的是回文,就把这部分放入list,并继续将剩下的字符串送入递归。否则尝试下一个切割点。
public class Solution {
List<List<String>> list;
List<String> li;
public List<List<String>> partition(String s) {
list = new ArrayList<>();
li = new ArrayList<>();
helper(s,0);
return list;
}
public void helper(String s, int start){
if(start == s.length()){
list.add(new ArrayList(li));
}
for(int i=start; i<s.length(); i++){
if(isPalindrome(s, start, i)){
li.add(s.substring(start, i+1));
helper(s, i+1);
li.remove(li.size()-1);
}
}
}
public boolean isPalindrome(String str, int l, int r){
while(l<r){
if(str.charAt(l) != str.charAt(r))
return false;
l++;
r--;
}
return true;
}
}