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