zoukankan      html  css  js  c++  java
  • 【leetcode】131. 分割回文串

    void recursion(char* s,int* returnSize,int* col,int* oodhash,int* evenhash,int pst,int start,int len,char** temp,char*** arr){
        if(start==len){
            arr[(*returnSize)]=(char**)calloc(pst+1,sizeof(char*));
            memcpy(arr[(*returnSize)],temp,sizeof(int*)*pst);
            col[(*returnSize)]=pst;
            (*returnSize)++;
            return;
        }    
        for (int i=start; i<len; i++)
        {
            int mid=(i+start)/2;
            char* buffer=(char*)calloc(20,sizeof(char));
            if( (i-start+1)%2 ){
                if ( start>=mid-oodhash[mid] && i<=mid+oodhash[mid] )
                {
                    memcpy(buffer,&s[start],i-start+1);
                    temp[pst]=buffer;
                }
                else
                    continue;            
            }
            else if( (i-start+1)%2==0 ){
                if (start>=mid-evenhash[mid] && i<=mid+1+evenhash[mid])
                {
                    memcpy(buffer,&s[start],i-start+1);
                    temp[pst]=buffer;
                }
                else
                    continue;            
            }
            recursion(s,returnSize,col,oodhash,evenhash,pst+1,i+1,len,temp,arr);
        }
    }
    
    char *** partition(char * s, int* returnSize, int** returnColumnSizes){
        *returnSize=0;
        *returnColumnSizes=(int*)calloc(50000,sizeof(int));
        char*** arr=(char***)calloc(50000,sizeof(char**));
        int oodhash[100]={0};
        int evenhash[100]={0};
        char* temp[100];
        int i, j, len=strlen(s), cnt;
        for (i=0; i<len; i++)
        {
            j=1; cnt=0;
            while(i-j>=0 && i+j<len && s[i-j]==s[i+j]){
                cnt++;
                j++;
            }
            oodhash[i]=cnt;
            if(i!=len-1){
                j=0; cnt=-1;
                while(i-j>=0 && i+1+j<len && s[i-j]==s[i+1+j]){
                    cnt++;
                    j++;
                }
                evenhash[i]=cnt;
            }
        }
        recursion(s,returnSize,*returnColumnSizes,oodhash,evenhash,0,0,len,temp,arr);
        return arr;
    }
  • 相关阅读:
    UDP协议
    发送大数据文件
    socket
    异常处理
    网络编程
    JupyterStudy——安装与环境部署
    PythonStudy——封装
    PythonStudy——继承、接口、鸭子类型
    PythonStudy——面向对象
    PythonStudy——xml 模块
  • 原文地址:https://www.cnblogs.com/ganxiang/p/14165324.html
Copyright © 2011-2022 走看看