充分利用next函数,把b接在a的后面,即可
#include<stdio.h>
#include<string.h>
int next[100005];
char a[50005],b[50005];
void get_next(char *p,int len)
{
int j=1;
next[0]=-1;
int k=-1;
for(;j<len;j++)
{
while(k>-1&&p[k+1]!=p[j]) k=next[k];
if(p[k+1]==p[j]) k++;
next[j]=k;
}
}
int main()
{
//freopen("Input.txt","r",stdin);
while(~scanf("%s",a))
{
scanf("%s",b);
int lena=strlen(a);
int lenb=strlen(b);
strcat(a,b);
int len=strlen(a);
get_next(a,len);
int k=len-1;
while(next[k]>=lena) k=next[k];
while(next[k]>=lenb) k=next[k];
if(next[k]>=0)
{
for(int i=0;i<=next[k];i++)
printf("%c",a[i]);
printf(" %d\n",next[k]+1);
}
else printf("0\n");
}
return 0;
}