AcWing4312.出现次数
题目链接
题目思路
KMP算法,再通过查询子串来计算出现次数
题目代码
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1010;
int ne[N];
char s[N], p[N];
int n, m, q;
int main()
{
cin >> n >> m >> q;
cin >> s + 1 >> p + 1;
for(int i = 2, j = 0; i <= n; i ++ )
{
while(j && p[i] != p[j + 1])
j = ne[j];
if(p[i] == p[j + 1]) j ++ ;
ne[i] = j;
}
while(q -- )
{
int l, r;
cin >> l >> r;
int ans = 0;
for(int i = l, j = 0; i <= r; i ++ )
{
while(j && s[i] != p[j + 1]) j = ne[j];
if(s[i] == p[j + 1]) j ++ ;
if(j == m)
{
ans ++ ;
j = ne[j];
}
}
cout << ans << endl;
}
return 0;
}
孤独本是常态

浙公网安备 33010602011771号