Given a string s, partition s such that every substring of the partition is a palindrome.java
Return all possible palindrome partitioning of s.spa
For example, given s ="aab",
Returncode
[递归
["aa","b"], ["a","a","b"]
]rem
思路:本题求全部解,通常使用深度优先+回溯的方法。对于求最优解或解的数量通常使用动态规划的方法。字符串
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; } }