回溯来做
class Solution {
public:
int dp[200][200];
vector<string> v;
vector<vector<string>> vec;
vector<vector<string>> partition(string s) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
if(!v.empty()) v.clear();
if(!vec.empty()) vec.clear();
if(s.size()==0) return vec;
int i,j,len=s.size();
memset(dp,0,sizeof(dp));
for(i=0;i<len;i++)
dp[i][i]=1;
for(i=0;i<len-1;i++)
if(s[i]==s[i+1])
dp[i][i+1]=1;
for(i=3;i<=len;i++){
for(j=0;j+i-1<len;j++){
if(s[j]==s[j+i-1]&&dp[j+1][j+i-2]==1){
dp[j][j+i-1]=1;
}
}
}
dfs(s,0);
return vec;
}
void dfs(string s,int x){
if(x==s.size()){
vec.push_back(v);
return;
}
for(int i=x;i<s.size();i++){
if(dp[x][i]==1){
v.push_back(s.substr(x,i-x+1));
dfs(s,i+1);
v.pop_back();
}
}
}
};