POJ 2406 入门KMP

以前写过一点字符串匹配方面的题目,但是理解不深刻,这次打算从入门级的步步深入

题意:求字符串子串的最大周期,至于要对字符串进行一遍预处理即可

#include <cstdio>
#include <cstdlib>
#include <cstring>

char b[1000010];
int p[1000010];

void getp(int m)
{
    p[1] = 0;
    int j = 0;
    for (int i = 2; i <= m; ++i)
    {
        while (j > 0 && b[j+1] != b[i])
            j = p[j];
        if (b[j+1] == b[i])
            ++j;
        p[i] = j;
    }
}

int main()
{
    while (scanf("%s", b + 1) != EOF)
    {
        if (b[1] == '.')
            break;
        int m = strlen(b + 1);
        getp(m);
        if (m % (m-p[m]) == 0)
            printf("%d\n", m/(m-p[m]));
        else
            printf("1\n");
    }
    return 0;
}
-------------------------------------------------------

kedebug

Department of Computer Science and Engineering,

Shanghai Jiao Tong University

E-mail: kedebug0@gmail.com

GitHub: http://github.com/kedebug

-------------------------------------------------------

原文地址:https://www.cnblogs.com/kedebug/p/2753615.html