kmp算法。
#include <cstdio>
#include <cstring> char src[], des[];
int next[], total; void kmp(char des[], char src[]){
int ld = strlen(des);
int ls = strlen(src);
int i, j; total = i = j = ;
while (i < ld) {
if (des[i] == src[j]) {
++i;
++j;
} else {
j = next[j];
if (j == -) {
j = ;
++i;
}
}
if (j == ls) {
++total;
j = next[j];
}
}
} void getnext(char src[]) {
int i=, j = -;
next[] = -;
while (i < strlen(src)) {
if (j==- || src[i]==src[j]) {
++i;
++j;
next[i] = j;
} else {
j = next[j];
}
}
} int main() {
int n; scanf("%d", &n);
while (n--) {
scanf("%s",src);
scanf("%s",des);
getnext(src);
kmp(des, src);
printf("%d\n", total);
} return ;
}