【leetcode】187. 重复的DNA序列

typedef struct{
    int hash[4];
}st;
int judge(char* s,int start,st* arr,int* size,int* map){
    int i, add=0;
    for (i=start; i<start+10; i++){
        if(arr[add].hash[map[s[i]-'A']]){
            add=arr[add].hash[map[s[i]-'A']];
        }
        else{
            arr[add].hash[map[s[i]-'A']]=++(*size);
            add=*size;
        }
    }
    return add;
}
char ** findRepeatedDnaSequences(char * s, int* returnSize){
    int len=strlen(s), i, size=0, cnt;
    char** ret=(char**)calloc(len,sizeof(char*));
    st* arr=(st*)calloc(len*10+1,sizeof(st));
    int* hash=(int*)calloc(len*10,sizeof(int));
    int map[20]={0};
    map['C'-'A']=1;
    map['G'-'A']=2;
    map['T'-'A']=3;
    *returnSize=0;
    for (i=0; i+9<len; i++){
        cnt = judge(s,i,arr,&size,map);
        if(hash[cnt]++==1){
            char* temp=(char*)calloc(11,sizeof(char));
            memcpy(temp,s+i,sizeof(char)*10);
            ret[(*returnSize)++]=temp;
        }        
    }
    return ret;
}
原文地址:https://www.cnblogs.com/ganxiang/p/14190386.html