KMP板子

KMP板子

#include <bits/stdc++.h>
using namespace std;

const int N = 1e5 + 10;

string s, p;
int ne[N];

signed main(){
    int n, m; 
    cin >> n >> p >> m >> s;
    p = " " + p; s = " " + s;
    for(int i = 2, j = 0; i < p.size(); ++i){
        while(j && p[i] != p[j+1]) j = ne[j];
        if(p[i] == p[j+1]) ++j;
        ne[i] = j;
    }
    for(int i = 1, j = 0; i < s.size(); ++i){
        while(j && s[i] != p[j+1]) j = ne[j];
        if(s[i] == p[j+1]) ++j;
        if(j == n){
            printf("%d ", i - j);
            j = ne[j];
        }
    }
    
    return 0;
}
posted @ 2025-04-05 21:53  awei040519  阅读(9)  评论(0)    收藏  举报