回溯---分割字符串使得每个部分都是回文数
分割字符串使得每个部分都是回文数
131. Palindrome Partitioning (Medium)
For example, given s = "aab",
Return
[
["aa","b"],
["a","a","b"]
]
题目描述:
给定一个字符串,将其分割成回文串,并返回所有的分割结果。
思路分析:
求子串问题,也可以用到回溯思想,我们只需要判断分割出来的字符串是否是回文,如果是回文就添加到结果中。
代码:
public List<List<String>>partition(String s){
List<List<String>>res=new ArrayList<>();
List<String>list=new ArrayList<>();
doPartition(s,res,list);
return res;
}
public void doPartition(String s,List<List<String>>res,List<String>list){
if(s.length()==0){
res.add(new ArrayList<>(list));
return;
}
for(int i=0;i<s.length();i++){
if(isPalindrome(s,0,i)){ //判断是否为回文
list.add(s.substring(0,i+1));
doPartition(s.substring(i+1),res,list);
list.remove(list.size()-1);
}
}
}
public boolean isPalindrome(String s,int start,int end){
while(start<end){
if(s.charAt(start++)!=s.charAt(end--))
return false;
}
return true;
}