首页 > 代码库 > HDProblem-2203亲和数(KMP算法)

HDProblem-2203亲和数(KMP算法)

 1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 #define N 100005 5 char s1[2*N],s2[N]; 6 int next[N],l1,l2; 7  8 void get_next(char *str,int len) 9 {10     int i=-1,j=0;11     next[0]=-1;            //注意给next[0]赋初值12     len=strlen(str);13     if(j<len)14     {15         if(i==-1||str[i]==str[j])16         {17             i++;18             j++;19             if(str[i]!=str[j])        //考虑当i=-1的情况20                 next[j]=i;21             else22                 next[i]=next[j];23         }24         else25             i=next[i];26     }27 }28 void KMP(char *str1,char *str2)29 {30     int i=0,j=0,len1,len2;31     len1=strlen(str1);32     len2=strlen(str2);33     while(i<len1&&j<len2)34     {35         if(j==-1||str1[i]==str2[j])36         {37             i++;38             j++;39         }40         else41             j=next[j];42     }43     if(j>=len2)44         printf("yes\n");45     else46         printf("no\n");47 }48 49 main()50 {51     int i;52     while(scanf("%s",s1)!=EOF)53     {54         l1=strlen(s1);55         for(i=0;i<l1;i++)56             s1[l1+i]=s1[i];57         scanf("%s",s2);58         l2=strlen(s2);59         get_next(s2,l2);    //没有返回值的函数用void定义60         KMP(s1,s2);61     }62 }63 64 65     

 可以看看这个链接(http://www.cnblogs.com/dolphin0520/archive/2011/08/24/2151846.html),对于KMP算法的解释直观明了