点击打开链接
#include <iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
const int maxn=50000+5;
const int maxm=100000+10;
void getnext(int next[],string s3)
{
int i=0,j=next[0]=-1;
int m=s3.length();
while(i<m)
{
if(j==-1||s3[i]==s3[j])
{
i++;
j++;
next[i]=j;
}
else j=next[j];
}
}
int main()
{
char s1[maxn],s2[maxn];
while(scanf("%s%s",s1,s2)==2)
{
int m=strlen(s1);
int n=strlen(s2);
string s3;
s3.clear();
s3+=s1;
s3+=s2;
int next[maxm];
getnext(next,s3);
int ans=0;
int k=s3.length();
while(k>0)
{
if(k<=m&&k<=n) ans=max(ans,k);
k=next[k];
}
if(!ans) printf("0\n");
else {
for(int i=0;i<ans;i++)
printf("%c",s3[i]);
printf(" %d\n",ans);
}
}
return 0;
}
hdu 2594 kmp
最新推荐文章于 2019-07-21 23:15:26 发布