编程语言
首页 > 编程语言> > next数组与KMP算法

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