标签:
#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