题目意思
简单的说就是给你T组测试数据,然后给你两个字符串(只包含大写字母),问你文本串中包含多少个模式串,其中字母可以重叠使用。例如:ABA BABABABA 答案就是3
解题思路
就是用简单的KMP算法跑一遍就可以求出。
代码部分
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;
const int maxn=1e4+10;
int nex[maxn];
char A[1000010];
char B[10010];
void GetNext(string B)///求模式串的next数组值
{
int len_B=B.size();
nex[0]=-1;
int k=-1,j=0;
while(j<len_B)
{
if(k==-1||B[j]==B[k])
{
++k;
++j;
nex[j]=k;
}
else
k=nex[k];
}
}
int kmp(string A,string B)///KMP算法
{
int i=0,j=0;
int ans=0;
int len_b=B.size();
int n=A.size();
while(i<n)
{
if(j==-1||A[i]==B[j])
{
++i;
++j;
}
else
j=nex[j];
if(j==len_b)
{
ans++;
}
}
return ans;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%s",B);
scanf("%s",A);
GetNext(B);
int sum=kmp(A,B);
printf("%d\n",sum);
}
return 0;
}