#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int next[1005];
void tonext(char b[],int blen)
{
int k=-1,i;
next[0]=-1;
for(i=1;i<blen;i++)
{
while(k>-1&&b[i]!=b[k+1]) k=next[k];
if(b[i]==b[k+1]) k++;
next[i]=k;
}
}
int kmp(char a[],char b[],int alen,int blen)
{
int k=-1,i,sum=0;
tonext(b,blen);
for(i=0;i<alen;i++)
{
while(k>-1&&a[i]!=b[k+1]) k=next[k];
if(a[i]==b[k+1]) k++;
if(k==blen-1)
{
// cout<<(i-k)<<endl;
sum++;
i=i-k+1;
k=-1;
}
}
return sum;
}
int main()
{
char a[10000],b[1000];
gets(a);
gets(b);
int alen=strlen(a),blen=strlen(b);
int sum= kmp(a,b,alen,blen);
for(int i=0;i<blen;i++) cout<<next[i]<<endl;
//cout<<sum;
return 0;
}
kmp模板
最新推荐文章于 2019-09-17 23:11:11 发布