//对字串进行处理,得到next表
#include <stdio.h>
#define N 50005
int ans,next[N],P[N],M[N];
void GetNext(int *P){
next[0]=-1;
for( int i = 1,j=-1 ; P[i] ; i++ ) {
if( P[i] == P[j+1] ){
j++;
next[i]=j;
}
else{
while( j!=-1 && P[i] != P[j+1] )
j=next[j];
next[i] = j;
}
}
}
void Kmp(int *M,int *P){
GetNext(P);
for(int i = 0, j = -1; M[i] ; i++ ){
while( j !=-1 && M[i] != P[j+1] )
j = next[j] ;
if( j == -1 && M[i] !=P[j+1] )
continue;
else
j++;
if( P[ j+1 ] == 0 )
ans++;
}
}
数据结构之KMP算法
本文详细介绍了如何对字串进行处理,得到next表,并应用KMP算法进行匹配。主要内容包括字串处理的基本概念、next表的生成方法、KMP算法的实现过程以及在实际应用中的案例分析。

被折叠的 条评论
为什么被折叠?



