題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=2087
這題。。。。不多說了。
#include<iostream>
#include<cstring>
#include<cmath>
#include<cstdio>
#include<algorithm>
using namespace std;
char a[1005], b[1005], Next[1005];
void getNext(int len)
{
int i = 0, j = -1;
Next[0] = -1;
while(i < len) {
if(j == -1 || b[i] == b[j]) {
Next[++i] = ++j;
}
else {
j = Next[j];
}
}
}
int main ()
{
while (scanf("%s", a), a[0] != '#') {
scanf("%s", b);
int alen = strlen(a);
int blen = strlen(b);
getNext(blen);
int ans = 0, i = 0, j = 0;
while(i < alen) {
if(j == -1 || a[i] == b[j]) {
i ++, j ++;
}
else {
j = Next[j];
}
if(j == blen) {
ans ++;
j = 0;
}
}
printf("%d\n", ans);
}
return 0;
}