kmp主要用于处理字符串匹配的问题,单串对单串,这东西,讲起来太麻烦了,当模板用吧
#include <iostream>
#include <string.h>
using namespace std;
int a[1000009],b[10009],n,m,next1[10009];
void f(string s2)
{ int k=-1,j=0;
next1[0]=-1;
int len2=s2.length();
while(j<len2)
{
if(k==-1||b[j]==b[k])
next1[++j]=++k;
else
k=next1[k];
}
}
int kmp(string s1,string s2)
{
f(s2);
int i=0,cnt=0;
int j=0;
int len1=s1.length();
int len2=s2.length();
for(int i=0;i<len1;i++)
{
while(j>0&&s1[i]!=s2[j])
{
j=next1[j];
}
if(s1[i]==s2[j])
{
j++;
}
if(j==len2)
{ cnt++;
j=next1[j];
}
}
return cnt;
}
int main(){
ios::sync_with_stdio(0);
int t;
cin>>t;
string s1,s2;
while(t--)
{
cin>>s2;
cin>>s1;
cout<<kmp(s1,s2)<<endl;
}
return 0;
}