【题目】
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"] ]
【回溯】
static void dfs(String s,ArrayList<String>path,ArrayList<ArrayList<String>>res){
if(s.length()==0){
res.add(new ArrayList<String>(path));
return;
}
for(int i = 1;i<=s.length();i++){
String subStr = s.substring(0, i);
if(isPalindrome(subStr)){
path.add(s.substring(0, i)); //如果是回文添加到数组中
dfs(s.substring(i),path,res);
path.remove(path.size()-1); //消除数组中的数据
}
}
}
/**
* 判断一个字符串是否是回文字符串
*/
private static boolean isPalindrome(String str){
int i = 0;
int j = str.length() - 1;
while (i < j){
if (str.charAt(i) != str.charAt(j)){
return false;
}
i++;
j--;
}
return true;
}
public static ArrayList<ArrayList<String>> partition(String s) {
ArrayList<ArrayList<String>> array=new ArrayList<ArrayList<String>>();
ArrayList res=new ArrayList<String>();
dfs(s,res,array);
System.out.println(array);
return array;
}
}