傻渡娘吧 关注:48贴子:3,303
  • 7回复贴,共1

Mark KMP算法视频

只看楼主收藏回复





1楼2011-11-29 08:54回复

    


    2楼2011-11-29 10:50
    回复
      严奶奶v587


      3楼2011-11-29 11:33
      回复

        #include<string.h>
        #include<stdlib.h>
        FILE *fin=fopen("test.in","r");
        FILE *fout=fopen("test.out","w");
        char s1[200],s2[200];
        int next[200];
        int max(int a,int b)
        {
        if(a>b) return a;
        return b;
        }
        void getnext()
        {
        memset(next,0,sizeof(next));
        int i=-1,j=0;
        next[0]=-1;
        while(j<strlen(s2))
        {
        if(i==-1||s2[i]==s2[j]){
        i++; j++;
        next[j]=i;
        }
        else i=next[i];
        }
        }
        int KMP()
        {
        int i=0,j=0,len1=strlen(s1),len2=strlen(s2);
        while((i<len1)&&(j<len2))
        {
        if(j==-1||s1[i]==s2[j]) {j++;i++;}
        else j=next[j];
        }
        if(j==len2) return i-len2;
        else return -1;
        }
        int index_KMP()
        {
        int i=0,j=0,len1=strlen(s1),len2=strlen(s2),re=0;
        while(i<len1&&j<len2)
        {
        if(j==-1||s1[i]==s2[j]) {i++;j++;}
        else j=next[j];
        re=max(re,j);
        }
        return re;
        }
        int main()
        {
        fscanf(fin,"%s",s1);
        for(int i=1;i<=3;i++)
        {
        fscanf(fin,"%s",s2);
        getnext();
        fprintf(fout,"%d %d\n",KMP(),index_KMP());
        }
        return 0;
        }


        4楼2011-11-30 16:37
        回复
          kmp还有视频讲解


          IP属地:四川5楼2011-11-30 23:25
          回复


            6楼2011-11-30 23:32
            回复
              讲得好吗,现在网速卡,缓冲不了。我是看的Matrix67的帖子学会的


              IP属地:四川7楼2011-11-30 23:33
              回复
                very good!只能说严奶奶V5 帖子那些好乱,,,木有心情看,,看严奶奶视频,非常给力呀


                8楼2011-11-30 23:43
                回复