串的朴素模式匹配算法、KPM算法以及手算next数组

4.2.1朴素模式匹配算法

1781247163389

1781247170471

1781247368456

1781247464248

int Index(SString S,SString T){
	int i = 1,n=StrLength(S),m=StrLength(T);
	SString sub;
	while(i<=n-m+1){
		SubString(sub,S,i,m);
		if(String(sub,T)!=0) ++i;
		else return i;
	}
	return 0;
}

1781247564712

1781247588352

1781247603545

1781247643657

1781247898856

#include<stdio.h>
int Index(SString S,SString T){
	int i=1,j=1;
	while(i<=S.length && j<=T.length){
		if(S.ch[i]==T.ch[j]){
			++i;++j
		}
		else{
			i=i-j+2;
			j=1;
		}
	} 
	if(j>T.length)
		return i-T.length;
	else
	return 0;
} 

1781247940976

1781248011154

4.2.2 KMP算法

1781248206488

1781248238137

1781248351737

1781248410290

1781248469298

1781248538202

1781248556353

1781248586520

1781248615042

1781248707849

1781248780259

1781248794659

1781248876362

#include<stdio.h>
int Index_KPM(SString S,SString T,int next[]){
	int i=1,j=1;
	while(i<=S.length && j<=T.length){
		if(j==0||S.ch[i]==T.ch[j]){
			++i;++j
		}
		else
			j=next[j];
	} 
	if(j>T.length)
		return i-T.length;
	else
	return 0;
} 

1781249343305

1781250265707

1781250293853

1781250564860

1781250690478

1781250728542

1781250735827

1781250846501

1781250995421

1781250999830

posted @ 2026-06-12 16:05  轻狂书生han  阅读(5)  评论(0)    收藏  举报