把两个串连起来 求next[]数组
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int N=50000+5;
char a[N*2],b[N];
int nex[N*2];
void getnext()
{
nex[0]=-1;
int i=1,j=0,len=strlen(a);
while(i<len)
{
if(j==-1||a[i]==a[j])
{
i++;j++;
nex[i]=j;
}
else
j=nex[j];
}
}
int main ()
{
while(~scanf("%s%s",a,b))
{
int lena=strlen(a),lenb=strlen(b);
strcat(a,b);
getnext();
int ans=nex[strlen(a)];
while(ans>lenb||ans>lena) ans=nex[ans];//直到长度小等于短串的长度
if(ans==0) printf("0\n");
else
{
a[ans]=0;//去掉后面的就是前缀啦
printf("%s %d\n",a,ans);
}
}
return 0;
}