KMP模版

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int next[10010];
void getNext(char *str)
{
 int j,k;
 memset(next,0,sizeof(next));
 j=0;
 k=-1;
 next[0]=-1;
 while(str[j])
 {
  if(k==-1 || str[j]==str[k])
   next[++j]=++k;
  else
   k=next[k];
 }
}

int
KMP(char *s,char *t) { getNext(t); int i,j,k; i=j=0; int num=0; while(s[i]!='\0') { if(s[i]==t[j]) { i++,j++; } else { if(next[j]!=-1) j=next[j]; else i++,j=0; } if(t[j]=='\0') { num++; //i-=j; //i++;进行重复匹配 j=0; } } return num; } int main() { char str1[]="ababababababa"; char str2[]="aba"; printf("%d\n",KMP(str1,str2)); return 0; }

 

posted @ 2013-07-05 15:09  fangguo  阅读(135)  评论(0编辑  收藏  举报