#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<string>
using namespace std;
int nnext[10000010];
void kmp_pre(const char ch[],int m,int nnext[] )
{
int i,j;
j=nnext[0]=-1;
i=0;
while(i<m)
{
while(-1!=j && ch[i]!=ch[j])
j=nnext[j];
nnext[++i]=++j;
}
}
int kmp_count(const char ch[],int m ,const char str[],int n)
{//ch是模式串,str是主串
int i,j;
int ans=0;
kmp_pre(ch,m,nnext);
i=j=0;
while(i<n)
{
while(-1!=j && str[i]!=ch[j])
j=nnext[j];
i++; j++;
if(j >= m)
{
ans++;
j=nnext[j];
}
}
return ans;
}
int main(){
#ifdef LOCAL
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
#endif
string a,b;
cin>>a>>b;
cout<<kmp_count(b.c_str(),b.length(),a.c_str(),a.length())<<endl;
return 0;
}
KMP模板
最新推荐文章于 2018-10-08 20:45:50 发布