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; } }