next数组与KMP算法
作者:互联网
KMP算法详解请参考:next数组实现及KMP算法(点这里),感谢大佬的文章!!!
反复研究,终于开窍搞出了代码!
next数组的实现:
//实现next数组
int get_next(char T[],int next[]){
next[0]=-1;
int i=0,j=-1;
int len=strlen(T);
while(i<len){
if(j==-1||T[i]==T[j]){
i++;
j++;
next[i]=j;
}
else{
j=next[j];
}
}
}
KMP查找:
//KMP算法
#include <iostream>
#include <cstring>
#define SIZE 100
using namespace std;
int getNext(char T[],int next[]){
next[0]=-1;
int i=0,j=-1;
int len=strlen(T);
while(i<len){
if(j==-1||T[i]==T[j]){
i++;
j++;
next[i]=j;
}
else{
j=next[j];
}
}
}
int KMP(char S[],char T[],int next[]) {
int i=0,j=0;
int S_len=strlen(S);
int T_len=strlen(T);
while(i<S_len&&j<T_len){
if(j==-1||S[i]==T[j]){
i++;
j++;
}
else{
j=next[j];
}
}
if(j==T_len)
return i-j;
else
return -1;
}
int main(){
char S[SIZE];
char T[SIZE];
int next[SIZE];
cout<<"请输入主串:";
cin>>S;
cout<<"请输入模式串:";
cin>>T;
getNext(T,next);
int a=KMP(S,T,next);
if(a==-1)
cout<<"匹配失败!" ;
else
cout<<"匹配成功!起始下标为"<<a;
}
标签:getNext,int,next,算法,数组,KMP 来源: https://blog.csdn.net/weixin_59566851/article/details/121916241