Given a string s, partition s such that every substring of the partition is a palindrome.
Return all possible palindrome partitioning of s.
Example:
Input: “aab”
Output:
[
[“aa”,“b”],
[“a”,“a”,“b”]
]
这是一道递归回溯的题目。
通过回溯找到所有的回文字符串,其中,index之前的都是分割好的回文字符串且存储进了list,从index之后寻找下一个回文字符串,当index == s.length()时,当前递归结束。其中,通过isPalindrome()方法判断一个一个字符串是否为回文字符串。
class Solution {
public List<List<String>> partition(String s) {
List<List<String>> res = new ArrayList<>();
List<String> list = new ArrayList<>();
backTracking(s, res, list, 0);
return res;
}
public void backTracking(String s, List<List<String>> res, List<String> list, int index) {
if(index == s.length()) {
res.add(new ArrayList<>(list));
return;
}
for(int i=index; i<s.length(); i++) {
String str = s.substring(index, i+1);
if(isPalindrome(str)) {
list.add(str);
backTracking(s, res, list, i+1);
list.remove(list.size()-1);
}
}
}
public boolean isPalindrome(String str) {
for(int i=0; i<str.length()/2; i++) {
if(str.charAt(i) != str.charAt(str.length()-i-1)) {
return false;
}
}
return true;
}
}