/**
* Return an array of arrays of size *returnSize.
* The sizes of the arrays are returned as *returnColumnSizes array.
* Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().
*/
char temp[20][20];
bool judge(char* s,int head,int tail){
while(head<=tail){
if(s[head]!=s[tail]) return false;
head++;
tail--;
}
return true;
}
void dfs(char*** array,char* s,int* returnSize,int n,int* column,int index,int count){
if(index>n) return;
if(index==n){
column[*returnSize]=count;
array[*returnSize]=(char**)malloc(sizeof(char*)*count);
for(int i=0;i<count;i++) array[*returnSize][i]=(char*)malloc(sizeof(char)*20);
for(int i=0;i<count;i++) strcpy(array[*returnSize][i],temp[i]);
(*returnSize)++;
return;
}
for(int i=0;i<n;i++){
int tail=index+i;
if(tail<n){
if(judge(s,index,tail)){
for(int start=index;start<=tail;start++) temp[count][start-index]=s[start];
dfs(array,s,returnSize,n,column,tail+1,count+1);
for(int start=index;start<=tail;start++) temp[count][start-index]=0;
}
}
}
}
char*** partition(char* s, int* returnSize, int** returnColumnSizes) {
for(int i=0;i<20;i++){
for(int j=0;j<20;j++) temp[i][j]=0;
}
int n=strlen(s);
*returnSize=0;
int* column=(int*)malloc(sizeof(int)*60000);
char*** array=(char***)malloc(sizeof(char**)*60000);
dfs(array,s,returnSize,n,column,0,0);
*returnColumnSizes=column;
return array;
}
![]()