class Solution {
public:
vector<vector<string>> partition(string s) {
vector<vector<string> > res;
vector<string> set;
dfs(s,set,res);
return res;
}
void dfs(string s,vector<string>& set,vector<vector<string> >& res)
{
if(s.empty())
{
res.push_back(set);
return;
}
for(int i=0;i<s.size();i++)
{
string temp=s.substr(0,i+1);
if(isPalindrome(temp))
{
set.push_back(temp);
dfs(s.substr(i+1),set,res);
set.pop_back();
}
}
}
bool isPalindrome(string s)
{
int l=0,r=s.size()-1;
while(l<r)
{
if(s[l++]!=s[r--])
return false;
}
return true;
}
};