⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kmp.cpp

📁 串的KMP算法
💻 CPP
字号:
#include <stdio.h>
#include <stdlib.h>
#include <iostream.h>
#include <string.h>

void Get_next(char *p,int next[]){
	int i,j,len;
	len=strlen(p);	i=0;
	next[0]=-1;	j=-1;
	while(i<len){
		if(j==-1 || p[i]==p[j]){
			++i;	
			++j;
			next[i]=j;
		}
		else
			j=next[j];
	}
}

int Index_KMP(char *s,char *p,int pos,int next[]){
	int i,j,slen,plen;
	i=pos;
	j=0;
	slen=strlen(s);
	plen=strlen(p);
	while(i<slen && j<plen){
		if(j==0 || s[i]==p[j]){
			++i;	++j;
		}
		else
			j=next[j];
	}
	if(j>=plen)
		return i-plen-pos;
	else
		return -1;
}

void main(){
	int next[9];
	int i;
	char s[19]="abcdabaabcacafcd";
	char p[9]="abaabcac";
	int pos=0;
	Get_next(p,next);
	for(i=0; i<(int)strlen(p) ;i++)
		printf("%d ",next[i]);
	printf("\n");
	pos=Index_KMP(s,p,pos,next);
	cout<<pos<<endl; 
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -