• 【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;
    }
  • 相关阅读:
    Java Collection工具类
    WebKit中WTFMove实现
    宏参数(Arguments)的扩展
    Block对变量的引用
    宏定义里面为什么要加括号?
    WebKit Inside: DOM树的构建
    宏定义中的重复副作用
    @weakify 与 @strongify 实现原理
    可变参数宏
    【问题解决】VSCode使用ssh远程连接出错Bad owner or permissions on C:\\Users\\wydxr/.ssh/config
  • 原文地址:https://www.cnblogs.com/ganxiang/p/14165324.html
Copyright © 2020-2023  润新知