KMP算法cpp实现
#include<iostream>
#define maxsize 255
using namespace std;
typedef struct{
char ch[maxsize];
int length;
}sstring;
void getnext(sstring t,int next[])
{
int i=1,j=0;
next[1]=0;
while(i<t.length)
{
if(j==0||t.ch[i]==t.ch[j])
{
++i;
++j;
next[i]=j;
}
else{
j=next[j];
}
}
}
int index(sstring s,sstring t,int next[])
{
int i=1,j=1;
while(i<=s.length&&j<=t.length){
if(j==0||s.ch[i]==t.ch[j])
{
++i;
++j;
}
else{
j=next[j];
}
}
if(j>t.length)
return j-t.length;
else
return 0;
}
int main()
{
sstring s={"abaabbabc",9};
sstring t={"bbabc",5};
int next[6];
getnext(t,next);
cout<<index(s,t,next);
return 0;
}