#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
using namespace std;
void makeNext(char s[],int next[])
{
int len = strlen(s);
next[0]=0;
for(int i=1,k=0;i<len;i++)
{
while(k>0 && s[k]!=s[i])
k=next[k-1];
if(s[k]==s[i])
k++;
next[i]=k;
}
}
int kmp(char t[],char s[])
{
int len1 = strlen(t);
int len2 = strlen(s);
int next[len2];
makeNext(s,next);
for(int i=0,j=0;i<len1;i++)
{
while(j>0 && t[i]!=s[j])
{
j=next[j-1];
}
if(t[i]==s[j])
j++;
if(j==len2)
return i-j+1;
}
}
int main()
{
char t[]="1234561123458412";
char s[]="611";
cout<<t<<endl;
cout<<s<<endl;
cout<<"下标为"<<kmp(t,s)<<endl;
}
————————————————
版权声明:本文为CSDN博主「ExcesiveYue」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yutong5818/article/details/81319120
原文:https://www.cnblogs.com/Cnxz/p/12456320.html