分析
思路KMP模板题
上代码
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
char x[1000001],y[1000001];
int ans,len1,len2,nxt[1000001];
int main()
{
scanf("%s%s",x+1,y+1);
len1=strlen(x+1);
len2=strlen(y+1);
nxt[1]=0;
int k=0;
for(int i=2;i<=len2;i++)
{
while(k>0&&y[i]!=y[k+1]) k=nxt[k];
if(y[i]==y[k+1]) k++;
nxt[i]=k;
}
k=0;
for(int i=1;i<=len1;i++)
{
while(k!=0&&x[i]!=y[k+1]) k=nxt[k];
if(x[i]==y[k+1]) k++;
if(k==len2) ans++;
}
cout<<ans;
return 0;
}