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"] ]
解法一:
用recursion实现DFS。
class Solution {
public:
vector<vector<string>> partition(string s) {
if(s.empty()) return {};
vector<vector<string>> res;
vector<string> out;
partition(s, 0, out, res);
return res;
}
void partition(string s, int start, vector<string>& out, vector<vector<string>>& res){
if(start==s.size()) {
res.push_back(out);
return;
}
for(int i= start; i<s.size(); i++){
if(!isPalindrome(s,start,i)) continue;
out.push_back(s.substr(start,i-start+1));
partition(s,i+1, out, res);
out.pop_back();
}
}
bool isPalindrome(string s, int start, int end){
while(start<=end){
if(s[start]!=s[end]) return false;
start++;
end--;
}
return true;
}
};