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"] ]
class Solution {
public:
vector< vector<string> > res;
void DFS(string& s, int start, vector< vector<bool> > & dp, vector<string>& vec)
{
if (start == s.length())
{
res.push_back(vec);
return;
}
for (int len = 1; len <= s.length() - start; len++)
{
if (dp[start][len])
{
vec.push_back(s.substr(start, len));
DFS(s, start + len, dp, vec);
vec.pop_back();
}
}
}
vector<vector<string>> partition(string s)
{
res.clear();
vector<vector<bool> > dp(s.length(), vector<bool>(s.length() + 1, false));
dp[0][0] = true;
for (int i = 0; i < s.length(); i++)
dp[i][1] = true;
for (int len = 2; len <= s.length(); len++)
{
for (int i = 0; i <= s.length() - len; i++)
{
if (len == 2 && s[i] == s[i+1])
dp[i][2] = true;
else if (dp[i+1][len-2] && s[i] == s[i+len-1])
dp[i][len] = true;
}
}
vector<string> vec;
DFS(s, 0, dp , vec);
return res;
}
};