标签:
#include <iostream> #include <malloc.h> #include <string.h> using namespace std; void CreateNext(int a[],char *str) { int n = strlen(str); a[0]=0; int flags = 0; for(int i=1;i<n;i++) { if(str[i]==str[flags]) { a[i]+=a[i-1]+1; flags++; } else if(str[i]!=str[flags]) { if(str[0]==str[i]) { flags=1; a[i]=1; continue; } flags=0; a[i]=0; } //自己版本的next数组。 } } bool MyKmp(char *diststr,char *srcstr) { if(strlen(srcstr)>strlen(diststr))return false; int *next = (int *)malloc(sizeof(int)*strlen(srcstr)); memset(next,0,sizeof(next)); CreateNext(next,srcstr); //----------------------- int i; int j; for(i=0,j=0;i<strlen(diststr)&&j<strlen(srcstr);) { if(diststr[i]!=srcstr[j]) { if(j!=0) i+=next[j]; else i+=next[j]+1; j=0; continue; } else { j++; i++; } } if(j>=strlen(srcstr)) return true; if(i>=strlen(diststr)) return false; } int main() { char s1[]="AaaaaaaaaaaddddddddAADC1"; char s2[]="addddA"; cout<<MyKmp(s1,s2)<<endl; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/liuhuiyan_2014/article/details/48110401