KMP实现

作者: Dg_fc58 | 来源:发表于2020-05-29 14:21 被阅读0次

    kmp next数组 理解

    #include <stdio.h>
    #include <string.h>
    
    void kmp_next(char* s,int* next){
      int i=0;
      next[0]=-1;
      int k=-1;
       while(i<strlen(s)){
        printf("j=%d  K=%d \n",i,k);
    
        if(k==-1 || s[i]==s[k]){
            i++;
            k++;
            next[i]=k;
    
        }else{
            k=next[k];
        }
       }
    
       printf("------------------------------\n");
        i=0;
       while(i<strlen(s)){
        printf(" %c |" ,s[i]);
        i++;
       }
       printf("\n");
    
        i=0;
       while(i<strlen(s)){
        printf(" %d |" ,next[i]);
        i++;
       }
       printf("\n");
       printf("------------------------------\n");
    
    }
    
    
    
    int  kmp_search(char* s, char * t ,int i){
        int slen=strlen(s);
        int tlen=strlen(t);
        int j=0;
        int* arr;
        arr=malloc(tlen*sizeof(int));
        kmp_next(&t[0],arr);
    
    
        while(i<=slen){
               printf("%c %c \n",s[i-1],t[j]);
            if(s[i-1]==t[j]){
                j++;
                i++;
            }else{
                j=arr[j];
                if(j==-1){
                    i++;
                    j=0;
                }
            }
    
            if(j==tlen){
                return i-j;
            }
    
        }
    
        return  0;
    }
    
    
    

    相关文章

      网友评论

          本文标题:KMP实现

          本文链接:https://www.haomeiwen.com/subject/aqixzhtx.html