KMPC++(Acwing)

KMPC++(Acwing)_第1张图片

KMPC++(Acwing)_第2张图片

KMPC++(Acwing)_第3张图片

KMPC++(Acwing)_第4张图片

KMPC++(Acwing)_第5张图片

KMPC++(Acwing)_第6张图片

KMPC++(Acwing)_第7张图片

KMPC++(Acwing)_第8张图片

KMPC++(Acwing)_第9张图片

KMPC++(Acwing)_第10张图片

KMPC++(Acwing)_第11张图片

KMPC++(Acwing)_第12张图片

KMPC++(Acwing)_第13张图片

KMPC++(Acwing)_第14张图片

KMPC++(Acwing)_第15张图片

KMPC++(Acwing)_第16张图片

代码:

#include 

using namespace std;

const int N = 100010, M = 1000010;

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

int main()
{
    cin >> n >> p + 1 >> m >> s + 1;

    for (int i = 2, j = 0; i <= n; 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 <= m; i ++ )
    {
        while (j && s[i] != p[j + 1]) j = ne[j];
        if (s[i] == p[j + 1]) j ++ ;
        if (j == n)
        {
            printf("%d ", i - n);
            j = ne[j];
        }
    }

    return 0;
}

你可能感兴趣的:(c++,算法,数据结构)