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"] ]
要用d f s来做。主要确认下是怎么往下一层递归就好。题目要求找出所有的回文子串,每个子串长度至少是1。所以在递归的时候, i 的范围是 index~ str.length,两边都是闭区间。左边是因为在调用substring方法的时候,第二个参数的位置取不到,所以要从index的位置开始。所以最后i要走到str.length才算完。
代码:
public List<List<String>> partition(String s) {
List<List<String>> result = new ArrayList<>();
if(s == null || s.length() == 0) return result;
List<String> cur = new ArrayList<>();
dfs(result, cur, 0, s);
return result;
}
private void dfs(List<List<String>> result, List<String> cur, int index, String s){
if(index == s.length()){
result.add(new ArrayList<String>(cur));
}
for(int i=index+1;i<=s.length();i++){
if(isPalindrome(s.substring(index, i))){
cur.add(s.substring(index, i));
dfs(result, cur, i, s);
cur.remove(cur.size()-1);
}
}
}
private boolean isPalindrome(String str){
if(str == null) return false;
if(str.length() == 0) return true;
int front = 0;
int back = str.length()-1;
boolean isPalin = true;
while(front < back){
if(str.charAt(front) != str.charAt(back)){
isPalin = false;
return false;
}else{
front++;
back--;
}
}
return true;
}