LeetCode刷题笔记-回溯法-分割回文串

题目描述:

给定一个字符串 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) 便于字串处理

Java代码实现如下

 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         }

   

猜你喜欢

转载自www.cnblogs.com/sqchao/p/11070140.html