这题HDU POJ 数据都非常有问题 #include <stdio.h> #define N 10002 char W[N]; char T[N*100]; int KMP () { int next[N],sum=0; next[0]=-1; int j=-1,i; for (i=1;W[i]!=0;i++) { while(j>-1 && W[j+1]!=W[i]) j=next[j]; if (W[j+1]==W[i]) j++; next[i]=j; } j=-1; for (i=0;T[i]!=0;i++) { while(j>-1 && W[j+1]!=T[i]) j=next[j]; if (W[j+1]==T[i]) j++; if (W[j+1]==0) { sum++; j=next[j]; } } return sum; } int main () { //freopen("1686.txt","r",stdin); int t; scanf("%d",&t); while(t--) { scanf("%s%s",W,T); printf("%d/n",KMP()); } }