思路:首先写一个判断字符串s中从start到end的子串是否是回文字符串。
然后里用深度优先搜索,写一个递归函数,将所有情况保存在ans中。
class Solution {
public:
vector<vector<string>> partition(string s) {
vector<vector<string> > ans;
vector<string> tmp;
helper(s,0,tmp,ans);
return ans;
}
void helper(string s,int start,vector<string> &tmp,vector<vector<string> > &ans)
{
if(start==s.size()) {ans.push_back(tmp);return ;}
for(int i=start;i<s.size();++i)
{
if(!ishuiwen(s,start,i)) continue;
tmp.push_back(s.substr(start,i-start+1));
helper(s,i+1,tmp,ans);
tmp.pop_back();
}
}
bool ishuiwen(string s,int start,int end)
{
while(start<end)
{
if(s[start]!=s[end]) return false;
++start,--end;
}
return true;
}
};