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"] ]
Subscribe to see which companies asked this question
class Solution {
private:
void partitionHelper(string &s, int idx, vector<vector<bool>> &dp, vector<string> &curVtr, vector<vector<string>> &retVtr) {
if (idx == s.size())
{
retVtr.push_back(curVtr);
return;
}
for (int len=1; len<=(int)s.size()-idx; len++)
{
if (dp[idx][idx+len-1])
{
curVtr.push_back(s.substr(idx, len));
partitionHelper(s, idx+len, dp, curVtr, retVtr);
curVtr.pop_back();
}
}
}
public:
vector<vector<string>> partition(string s) {
vector<vector<string>> retVtr;
vector<string> curVtr;
vector<vector<bool>> dp(s.size(), vector<bool>(s.size()));
for (int i=0; i<s.size(); i++)
dp[i][i] = true;
for (int i=1; i<s.size(); i++)
if (s[i-1] == s[i])
dp[i-1][i] = true;
for (int len=2; len<=s.size()-1; len++)
{
//这里等号要注意
for (int i=0; i<=(int)s.size()-1-len; i++)
{
if (s[i] == s[i+len] && dp[i+1][i+len-1])
dp[i][i+len] = true;
}
}
partitionHelper(s, 0, dp, curVtr, retVtr);
return retVtr;
}
};