llllmz

导航

131. 分割回文串c

/**
 * 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;
}

posted on 2024-03-15 16:39  神奇的萝卜丝  阅读(13)  评论(0)    收藏  举报