#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int T, nxt[1000050], lens, lent;
char s[1000050], t[1000050];
void init() {
int i = 0, j = -1;
nxt[0] = -1;
while(i < lent) {
if(j == -1 || t[j] == t[i]) {
i ++, j ++;
nxt[i] = j;
}
else j = nxt[j];
}
}
int kmp() {
int i = 0, j = 0, ans = 0;
while(i < lens) {
if(j == -1 || s[i] == t[j]) {
i ++, j ++;
if(j == lent) j = nxt[j], ans ++;
}
else j = nxt[j];
}
return ans;
}
int main() {
scanf("%d", &T);
while(T --) {
scanf("%s", &t);
scanf("%s", &s);
lent = strlen(t);
lens = strlen(s);
init();
printf("%d\n", kmp());
}
return 0;
}
【NOIP模板】KMP
最新推荐文章于 2018-10-25 21:32:08 发布