#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int nxt[110];
char s[110], s1[100];
void getnxt(){
int j=nxt[0]=-1, i=0;
int len=strlen(s);
while(i<len){
while(j!=-1 && s[j]!=s[i]){
j=nxt[j];
}
if(s[++i]==s[++j]) nxt[i]=nxt[j];
else nxt[i]=j;
}
}
void KMP(){
int len1=strlen(s), len2=strlen(s1);
int i=0, j=0, ans=0;
while(i<len2){
while(j!=-1 && s[j]!=s1[i]) j=nxt[j];
i++; j++;
if(j>=len1)
{
ans++;
j=0;
}
}
printf("%d\n", ans);
}
int main(){
cin>>s>>s1;
getnxt();
KMP();
return 0;
}
串的模式匹配算法-KMP
最新推荐文章于 2021-07-31 15:44:44 发布