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"] ]
思路: DP+ 回溯
class Solution {
public:
vector<vector<string>> res;
int n;
vector<vector<string>> partition(string s) {
n = s.size();
vector<vector<bool>> dp(n,vector<bool>(n,false));
for (int i = 0; i < n; i++){
for (int j = 0; j < n-i; j++){
if (s[j+i] == s[j]){
if (i <= 1)
dp[j][j+i] = true;
else
dp[j][j+i] = dp[j + 1][j+i-1];
}
}
}
vector<string> path;
dfs(0, path, s, dp);
return res;
}
void dfs(int level, vector<string> &path, string &s, vector<vector<bool>> &dp){
if (level == n){
res.push_back(path);
return;
}
for (int i = level; i < s.size(); i++){
if (dp[level][i]){
path.push_back(s.substr(level, i - level + 1));
dfs(i + 1, path, s, dp);
path.pop_back();
}
}
}
};