HDU 2087 KMP裸题

2014-11-24 03:28:12 · 作者: · 浏览: 0
#include
  
   
#include
   
     #define N 1005 int f[N], ans; char P[N], T[N]; void getFail(int len){ int i, j; j = f[0] = -1; i = 0; while(i < len) { while(j!=-1 && P[i]!=P[j])j = f[j]; i++, j++; if(P[i] == P[j])f[i] = f[j]; else f[i] = j; } } void KMP(int Tlen, int Plen){ int i, j; i = 0, j = 0; getFail(Plen); while(i < Tlen){ while(j!=-1 && P[j] != T[i])j = f[j]; i++, j++; if(j >
= Plen) { ans++; j = 0; } } } int main(){ while(scanf("%s", T), T[0] != '#'){ scanf("%s", P); ans = 0; KMP(strlen(T), strlen(P)); printf("%d\n",ans); } return 0; }