abcde a3 aaaaaa aa #
0 3//这道kmp的关键就是在一次匹配后不能退出,必须匹配到母串结束为止。下面是代码:#include<stdio.h> #include<string.h> #include<stdlib.h> #include<iostream>
using namespace std;
char s1[1005]; char s2[1005]; int next[1005]; int l1,l2;
void getnextval(char *T,int *next) { int k=1,j=0; while(k<l2) { if(j==0||T[j]==T[k]) { ++j; ++k; if(T[k]==T[j]) next[k]=next[j]; else next[k]=j; } else j=next[j]; } }
int kmp(char *T,char *p,int *next) { int k=0,j=0,count=0; while(k<=l1) { if(j==0||T[k]==p[j]) { if(j==l2) { count++; j=0; } ++k; ++j; } else j=next[j];
} return count; }
int main() { while(scanf("%s",s1+1),s1[1]!='#') { l1=strlen(s1+1); scanf("%s",s2+1); l2=strlen(s2+1); getnextval(s2,next); printf("%d\n",kmp(s1,s2,next)); } return 0; }