#include <stdio.h>
#include <iostream>
#include <string.H>
using namespace std;
typedef long long ll;
const int maxn=100;
string p,t;
int nextval[2010];
void getnext(string s)
{
int len=s.length();
int j=-1;
nextval[0]=-1;
for(int i=1; i<len; i++)
{
if(j!=-1&&s[i]!=s[j+1])
{
j=nextval[j];
}
if(s[i]==s[j+1])
{
j++;
}
nextval[i]=j;
}
}
int cal(string t,string p)
{
getnext(p);
int n=t.length();
int m=p.length();
int j=-1;
int ans=0;
for(int i=0; i<n; i++)
{
while(j!=-1&&t[i]!=p[j+1])
{
j=nextval[j];
}
if(t[i]==p[j+1])
{
j++;
}
if(j==m-1)
{
ans++;
j=nextval[j];
}
}
return ans;
}
int main()
{
while(cin>>t>>p)
{
cout<<cal(t,p)<<endl;
}
return 0;
}
用kmp求字符串出现次数
最新推荐文章于 2022-11-21 19:48:57 发布