class Solution {
public:
bool isPalindrome(string s,int begin,int end)
{
while(begin<end)
{
if(s[begin]==s[end])
{
begin++;
end--;
}
else break;
}
if(begin>=end)
return true;
else return false;
}
void DFS(string s, int begin,vector<string>&path,vector<vector<string>>&ret)
{
if(begin==s.size())
{
ret.push_back(path);
return;
}
for(int i=begin;i<s.size();i++)
{
if(isPalindrome(s,begin,i))
{
path.push_back(s.substr(begin,i-begin+1));
DFS(s,i+1,path,ret);
path.pop_back();
}
}
}
vector<vector<string>> partition(string s) {
vector<string> path;
vector<vector<string>> ret;
DFS(s,0,path,ret);
return ret;
}
};
public:
bool isPalindrome(string s,int begin,int end)
{
while(begin<end)
{
if(s[begin]==s[end])
{
begin++;
end--;
}
else break;
}
if(begin>=end)
return true;
else return false;
}
void DFS(string s, int begin,vector<string>&path,vector<vector<string>>&ret)
{
if(begin==s.size())
{
ret.push_back(path);
return;
}
for(int i=begin;i<s.size();i++)
{
if(isPalindrome(s,begin,i))
{
path.push_back(s.substr(begin,i-begin+1));
DFS(s,i+1,path,ret);
path.pop_back();
}
}
}
vector<vector<string>> partition(string s) {
vector<string> path;
vector<vector<string>> ret;
DFS(s,0,path,ret);
return ret;
}
};