额,不知道怎么写,但是是模板题,知道字串查找怎么写基本就是可以A的,子串查找(字符串匹配)_查找子串_llayjun的博客-CSDN博客
然后就是CODE:
#include<bits/stdc++.h>
char a[1000005];
char b[1000005];
int len1,len2;
int next[1000005];
void getnext()
{
int i=0,j=-1;
next[0]=-1;
while(i<len2){
if(j==-1||b[i]==b[j]){
i++;
j++;
next[i]=j;
}else{
j=next[j];
}
}
}
void kmp(){
int i=0,j=0;
int ans=0;
while(i<len1){
if(j==-1||b[j]==a[i]){
i++;
j++;
}
else{
j=next[j];
}
if(j==len2){
j=next[j];
ans++;
}
}
printf("%d\n",ans);
}
int main(){
scanf("%s %s",a,b);
len1=strlen(a);
len2=strlen(b);
if(len1>len2){
getnext();
kmp();
}else{
printf("0");
}
return 0;
}