分割回文串
题目描述:
给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。
返回 s 所有可能的分割方案。
示例:
输入: "aab"
输出:
[
["aa","b"],
["a","a","b"]
]
问题分析:
步骤如下:
1,设置一个全局的 List 对象,res,用来返回最后的结果,将符合条件的分割方案,加入其中
static List<List<String>> res = new ArrayList<>();
2,明确使用递归,注意传递的参数
static void backTracing(List<String> list,String s, int i){
......
backTracing(new ArrayList<String> (list),s,j);
......
}
3,写出判断是否是回文串的函数
static boolean isParlindrome(String s){}
4,注意方法的使用,add,remove
list.add(s.substring(i,j));
list.remove(list.size()-1);
代码展示(已验证):
class Solution {
static List<List<String>> res = new ArrayList<>();
public List<List<String>> partition(String s) {
if(s.length() ==0 || s=="")
return res;
List<String> list = new ArrayList<>();
backTracing(list,s,0);
return res;
}
// 递归判定子串并将其加到 res 上
static void backTracing(List<String> list,String s, int i){
if(i==s.length()){
res.add(list);
}
for(int j=i+1;j<=s.length();++j){
if(isParlindrome(s.substring(i,j))){
list.add(s.substring(i,j));
backTracing(new ArrayList<String> (list),s,j);
list.remove(list.size()-1);
}
}
}
static boolean isParlindrome(String s){ //判断是否为回文串
if(s==""||s.length()==0){
return false;
}
int len=s.length();
for(int i=0;i<=len/2;++i){
if(s.charAt(i)!=s.charAt(len-1-i)){
return false;
}
}
return true;
}
}
泡泡:
分割字符串主要还是 创建对象,使用方法,使用递归,然后将符合要求的子串,添加到 要返回的那个 res 上,最后 return.