kmp实现

Posted crab

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了kmp实现相关的知识,希望对你有一定的参考价值。

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

const int N = 1e5 + 10, M = 1e6 + 10;

char p[N], s[M];
int n,m,ne[N];

int main(){
    cin.tie(NULL); ios::sync_with_stdio(false);
    
    cin >> n >> (p+1) >> m >> (s+1);
    
    int i,j,k;
    j = 1, k = 0, ne[1] = 0;
    while(j <= n){
        if(k == 0 || p[j] == p[k]){ne[j+1] = k+1; j++;k++;}
        else k = ne[k];
    }
    
    i = 1, j = 1;
    while(i <= m){
        if(j == 0 || s[i] == p[j]){
            i++; j++;
            if(j > n) printf("%d%c",i-n-1,i>m?\'\\n\':\' \');
        }
        else j = ne[j];
    }
    
//    if(j > n) cout << i-n-1 << endl;
//    else cout << -1 <<endl;
    
    return 0;
}

以上是关于kmp实现的主要内容,如果未能解决你的问题,请参考以下文章

Kmp算法Java代码实现

KMP算法详解以及Java代码实现

KMP算法详解以及Java代码实现

KMP算法的理解和代码实现

KMP算法代码实现记录

KMP算法的代码实现