题目主要意思 就是让你找出前面一串字符的前缀和后面字符串的相同的后缀 ,并且打印这个字符串的长度
我的做法就是把两个字符串拼接起来,用KMp算法的NEXT数组可以求相同的前缀后缀,但是要注意,求出的长度不应该大于原来的最短字符串的长度
#include<stdio.h> #include<string.h> #include<stdlib.h> char a[10000005]; char b[10000005]; int next[100000005]; int main() { int i,j,k; int alen,blen,l; int t; while(scanf("%s",a)==1){//注意,求出子串最大长度不超过原来字符串长度的较小值 scanf("%s",b); alen=strlen(a); blen=strlen(b); strcat(a,b); l=strlen(a); //printf("%d",alen); if(alen>blen) t=blen; else t=alen; next[0]=-1; k=-1; j=0; while(j<l){ if(k==-1||a[k]==a[j]){ ++k; ++j; next[j]=k; } else k=next[k]; } //for(i=0;i<=alen;i++) printf("%d ",next[i]); if(next[l]>=t){ for(i=0;i<t;i++)printf("%c",a[i]); printf(" %d\n",t); } else{ if(next[l]==0) printf("0\n"); else{ for(i=0;i<next[l];i++) printf("%c",a[i]); printf(" %d\n",next[l]); } } } return 0; }