题目描述:
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"] ]
中文理解:
给定一个字符串,返回所有回文字符串的集合。
解题思路:
回溯,当长度等于字符串长度是返回,不然每次向前寻找可以构成回文串的字符加入结果中。
代码(java):
class Solution {
public List<List<String>> partition(String s) {
List<List<String>> res = new ArrayList<List<String>>();
List<String> list = new ArrayList<String>();
partitionHelper(res, list, s, 0);
return res;
}
public void partitionHelper(List<List<String>> res, List<String> list, String s, int start){
if(start == s.length()){
res.add(new ArrayList<String>(list));
return;
}
for(int i = start; i < s.length(); i++){
if(isPalindrome(s.substring(start, i+1))){
list.add(s.substring(start, i+1));
partitionHelper(res, list, s, i+1);
list.remove(list.size()-1);
}
}
}
public boolean isPalindrome(String s){
int start = 0, end = s.length()-1;
while(start <= end){
if(s.charAt(start) != s.charAt(end))
return false;
start++;
end--;
}
return true;
}
}