//#include<bits/stdc++.h>
#include<iostream>
#include<memory.h>
#include<string.h>
#include<cstdio>
using namespace std;
const int maxn=10e3;
char a[50500],b[100050];
int nextl[100050];
void crenext()
{
memset(nextl,0,sizeof(nextl));
nextl[0]=-1;
int j;
int m=strlen(b)-1;
for(int i=1;i<=m;i++)
{
j=nextl[i-1];
while(b[j+1]!=b[i]&&j>=0)
{
j=nextl[j];//cout<<j<<endl;
}
if(b[j+1]==b[i])
nextl[i]=j+1;
else
nextl[i]=-1;
}
for(int i=0;i<=m;i++)
nextl[i]++;
/* for(int i=0;i<m;i++)
cout<<nextl[i]<<" ";*/
}
int main()
{
memset(b,0,sizeof(b));memset(a,0,sizeof(a));
char c[]=" ";
while(cin>>b>>a)
{
//>>a;
{
strcat(b,c);
strcat(b,a);
int m=strlen(b);
int i=0,j=0,pos=-1;
crenext();
int coun=0; //char *pp=*b[m-nextl[m-1]];
if(nextl[m-1]==0&&b[m-1]!=b[0])cout<<0<<endl;
else
{
for(int i=0;i<nextl[m-1];i++)printf("%c",b[i]);cout<<" "<<nextl[m-1]<<endl;
}
}
}
return 0;}
把两个串接起来然后把next[m-1]输出就行了
hdu2594--kmp入门题
最新推荐文章于 2022-01-20 09:39:03 发布