首页 > 代码库 > 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算法的解释直观明了
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。