代码
int fail[maxn];
void get_fail(int arry[], int l){
fail[0] = fail[1] = 0;
for(int i = 2, j = 0; i <= l; ++i){
while(j > 0 && arry[i] != arry[j+1]) j = fail[j];
if(arry[i] == arry[j+1]) ++j;
fail[i] = j;
}
}
int kmp(int arry[], int p, int mode[], int q){
get_fail(mode, q);
for(int i = 1, j = 0; i <= p; ++i){
while(j > 0 && arry[i] != mode[j+1]) j = fail[j];
if(arry[i] == mode[j+1]) ++j;
if(j == q) return i - q + 1;
}
return 0;
}
本文介绍了一种高效的字符串匹配算法——KMP算法,并提供了详细的代码实现。通过预处理模式串生成失败函数,KMP算法能够在主串中快速查找模式串出现的位置。
10万+

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



