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"] ]
考察:DFS;
class Solution {
public:
vector<vector<string>> partition(string s) {
vector<vector<string>> res;
vector<string> out;
partitionDFS(s, 0, out, res);
return res;
}
void partitionDFS(string s, int start, vector<string> &out, vector<vector<string>> &res) {
if (s.length() == start) {
res.push_back(out);
return ;
}
for (int i = start; i < s.length(); i ++) {
if (isPalindrome(s, start, i)) {
out.push_back(s.substr(start, i-start+1));
partitionDFS(s, i+1, out, res);
out.pop_back();
}
}
}
bool isPalindrome(string s, int left, int right) {
while (left < right) {
if (s[left] != s[right])
return false;
left ++, right --;
}
return true;
}
};