题目描述
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.ArrayList;
public class Solution {
public ArrayList<ArrayList<String>> partition(String s) {
ArrayList<ArrayList<String>> lists = new ArrayList<ArrayList<String>>();
if (s.length() == 0) {
return lists;
}
ArrayList<String> array = new ArrayList<String>();
dfs(s, array, lists);
return lists;
}
// 深搜
private void dfs(String s, ArrayList<String> array, ArrayList<ArrayList<String>> lists) {
// TODO Auto-generated method stub
if (null == s || s.length() == 0) {
lists.add(new ArrayList(array));
return;
}
for (int i = 1; i <= s.length(); i++) {
String substr = s.substring(0, i);
if (is_palindrome(substr)) {
array.add(substr);
dfs(s.substring(i), array, lists);
array.remove(array.size() - 1);
}
}
}
// 判断是否是回文
private boolean is_palindrome(String substr) {
// TODO Auto-generated method stub
if (substr.length() < 2) {
return true;
}
int left = 0;
int right = substr.length() - 1;
while (left < right) {
if (substr.charAt(left) != substr.charAt(right)) {
return false;
}
left++;
right--;
}
return true;
}
}