#include<iostream>
#include<string.h>
using namespace std;
int next[50005];
char s[50005],t[50005];
void getnext()
{
int i=0,j=-1;
next[0]=-1;
int len=strlen(s);
while(i<len)
{
if(s[i]==s[j]||j==-1)
{
i++;
j++;
next[i]=j;
}
else
j=next[j];
}
}
void kmp()
{
int i=0,j=0;
int lens=strlen(s);
int lent=strlen(t);
while(i<lent&&j<lent)
{
if(s[j]==t[i]||j==-1)
{
i++;
j++;
}
else
j=next[j];
}
if(!j)
printf("0\n");
else
{
s[j]=0;
printf("%s %d\n",s,j);
}
}
int main()
{
while(scanf("%s%s",s,t)>0)
{
getnext();
kmp();
}
return 0;
}
next函数与kmp模板
最新推荐文章于 2023-03-16 22:40:31 发布