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"]
]
思路:本题求所有解,一般使用深度优先+回溯的方法。对于求最优解或解的数量一般使用动态规划的方法。
import java.util.*;
public class Solution {
public ArrayList<ArrayList<String>> partition(String s) {
if(s==null){
return null;
}
ArrayList<ArrayList<String>> result=new ArrayList<ArrayList<String>>();
ArrayList<String> cur=new ArrayList<String>();
find(s,result,cur);
return result;
}
public void find(String s,ArrayList<ArrayList<String>> result,ArrayList<String> cur){
if(s.length()==0){
//注意要new 一个ArrayList才可以
result.add(new ArrayList<>(cur));
return;
}
for(int i=1;i<=s.length();i++){
if(ispalindrome(s.substring(0,i))){
cur.add(s.substring(0,i));
//回溯家+递归
find(s.substring(i,s.length()),result,cur);
if(cur.size()!=0) {
cur.remove(cur.size() - 1);
}
}
}
}
//头尾字符依次比较,判断是否是回文字符串
public boolean ispalindrome(String s){
int i=0;
int j=s.length()-1;
while(i<=j){
if(s.charAt(i)==s.charAt(j)){
i++;
j--;
continue;
}else{
return false;
}
}
return true;
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。