-----QUESTION-----
Given a string
Return all possible palindrome partitioning of
For example, given "aab"
,
Return
[ ["aa","b"], ["a","a","b"] ]
-----SOLUTION-----
class Solution {
public:
vector<vector<string>> partition(string s) {
results.clear();
int sLength = s.length();
vector<vector<bool>> flag(sLength, vector<bool>(sLength,false));
for (int i=0;i<sLength;i++)
{
for(int j=0;j<=i;j++)
if(s[i]==s[j]&&(i-j<2||flag[j+1][i-1]))
{
flag[j][i]=true;
}
}
vector<string> pre;
dfs(s,flag,pre,0);
return results;
}
void dfs(const string &s, vector<vector<bool>> &flag, vector<string> &pre, int depth)
{
if(depth>=s.length())
{
results.push_back(pre);
return;
}
for(int i = depth; i<s.length(); i++)
{
if(flag[depth][i])
{
pre.push_back(s.substr(depth, i-depth+1));
dfs(s,flag,pre,i+1);
pre.pop_back();
}
}
}
private:
vector<vector<string>> results;
};