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实现的主要内容,如果未能解决你的问题,请参考以下文章