RocksonLee's Blog
avatar
RocksonLee
2021-12-09 13:38:33
  • 本文总阅读量
#include <bits/stdc++.h>
using namespace std;
#define il inline
#define N 1000100
#define Inf 0x3f3f3f3f
int Kmp[N];
char Mode[N], S[N];
int main()
{
    scanf("%s", S + 1);
    scanf("%s", Mode + 1);
    int lena = strlen(S + 1), lenb = strlen(Mode + 1);
    for (int i = 2, j = 0; i <= lenb; i++)
    {
        while (j && Mode[i] != Mode[j + 1]) j = Kmp[j];
        if (Mode[i] == Mode[j + 1]) j++;
        Kmp[i] = j;
    }
    for (int i = 1, j = 0; i <= lena; i++)
    {
        while (j && S[i] != Mode[j + 1]) j = Kmp[j];
        if (S[i] == Mode[j + 1]) j++;
        if (j == lenb) printf("%d\n", i + 1 - lenb), j = Kmp[j];
    }
    for (int i = 1; i <= lenb; i++) printf("%d ", Kmp[i]);
    return 0;
}
KMP初探
comment评论
Search
search