题意:
将字符串分割。使每个子串都是回文字符串。返回所有满足条件的分割。
分析:
这个题一眼望去就应该先把问题分解,一是判断子串是否回文。二是搜索。搜索的话,这种情况适合递归深搜。
对于回文判断:传入字符串,一头一尾,两个指针向中间遍历,并比较即可判断。
对于搜索:
我们每次递归中,应该切割字符串,如果切割下来的是回文,就把这部分放入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; } }