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"] ]
解题思路
求所有答案,首先排除动态规划,应该是DFS (Palindrome Partitioning II 求个数才是动归)
- 遇到要求所有组合、可能、排列等解集的题目,一般都是DFS + backtracking
- 首先传入s="aab" path=[] res = [], 首先切割出"a"(然后是"aa" "aab" ...),然后判读它是不是回文串:
- 如果不是,直接跳过
- 如果是,则此时剩余的 s="ab", path += ["a"]
- 写入res的判断是,当s=""时,记录结果
1 class Solution { 2 private List<List<String>> res = new ArrayList<>(); 3 public List<List<String>> partition(String s) { 4 5 help(new ArrayList<>(), s, 0); 6 return res; 7 } 8 9 private void help( List<String> temp, String s, int index){ 10 if(index == s.length()) 11 res.add(new ArrayList<>(temp)); 12 else{ 13 for(int i = index; i < s.length(); i++){ 14 if(isPalindrome(s, index, i)){ 15 temp.add(s.substring(index, i + 1)); 16 help(temp, s, i + 1); 17 temp.remove(temp.size() - 1); 18 } 19 } 20 } 21 } 22 23 public boolean isPalindrome(String s, int low, int high){ 24 while(low < high) 25 if(s.charAt(low++) != s.charAt(high--)) return false; 26 return true; 27 } 28 }