#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