上期数据结构专栏中我分享了大神的对KMP算法的讲解
but talk is cheap,show me the code
我分享我的简单代码
#include"iostream"
#include"cstdio"
#include"cstring"
using namespace std;
char part[100];
char impo[100];
int next[100];
void getnext()
{
int k=0;
next[0]=0;
for(int i=1;i<strlen(part);i++)
{
while(k>0&&part[i]!=part[k])
{
k=next[k-1];
}
if(part[i]==part[k])
{
k++;
}
next[i]=k;
}
}
int kmp()
{
for(int i=0;i<=strlen(impo);)
{
int j;
int w=i;
for(j=0;j<strlen(part);)
{
if(impo[i]==part[j])
{
i++;
j++;
}
else
{
i+=j-1-next[j-1]-1;
break;
}
}
if(j==strlen(part)) return w;
}
return -1;
}
int main()
{
gets(part);
gets(impo);
getnext();
cout<<kmp()<<endl;
return 0;
}