给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。
返回 s 所有可能的分割方案。
示例:
输入: "aab"
输出:
[
["aa","b"],
["a","a","b"]
]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/palindrome-partitioning
1、显然回溯法:求所有可能结果&结果是个List<list<>>类型。
2、此题与求所以子集很相似,知识每个自己都要判断一个是不是回文串。
3、注意判断回溯函数使用huisu(int begin,int end,String target) 便于字串处理
1 //回文字符判断 2 public boolean isPalindrome(String s,int start,int end){ 3 while(start<end){ 4 if(s.charAt(start)!=s.charAt(end)) 5 return false; 6 start++; 7 end--; 8 } 9 return true; 10 } 11 12 public List<List<String>> partition(String s) { 13 //求出所有子集 14 //判断是不是回文 15 List<List<String>> result = new ArrayList<>(); 16 List<String> temp = new ArrayList<>(); 17 part(result,temp,s,0); 18 return result; 19 } 20 21 public void part(List<List<String>> result,List<String> temp,String s,int begin){ 22 if (begin==s.length()){ 23 result.add(new ArrayList(temp)); //一定要先申请内存,否则添加的是一个引用,返回结果为空。 24 return; //处理完成一定要return!!! 25 } 26 for (int i=begin;i<s.length();i++){ 27 if (isPalindrome(s,begin,i)){ 28 temp.add(s.substring(begin,i+1)); 29 part(result,temp,s,i+1); 30 temp.remove(temp.size()-1); 31 } 34 }
原文:https://www.cnblogs.com/sqchao/p/11070140.html