#include<bits/stdc++.h>
using namespace std;
const int maxn=1000000;
string s,t;
int ans;
int ex[maxn]={0};
void get(int n)
{
int j=0,i=1;
while(i<n)
{
if(s[j]==s[i]) ex[i++]=++j;
else if(s[j]!=s[i]&&j) j=ex[j-1];
else ex[i++]=0;
}
}
void kmp(int n,int m)
{
int i=0,j=0;
while(j<m)
{
if(s[i]==t[j]&&i<n)
{
j++;
i++;
}
else if(i==0) j++;
else i=ex[i-1];
if(i==n) ans++;
}
}
int main()
{
cin>>t>>s;
get(s.size());
kmp(s.size(),t.size());
cout<<ans<<endl;
return 0;
}
字符串模式匹配(KMP)
最新推荐文章于 2024-04-14 17:48:07 发布