zoukankan      html  css  js  c++  java
  • 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

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

  • 相关阅读:
    十天冲刺第1天
    第十四周学习总结
    评价输入法
    第十三周学习总结
    第十二周学习总结
    失物招领平台10
    失物招领平台9
    失物招领平台8
    第十一周学习总结
    失物招领平台7
  • 原文地址:https://www.cnblogs.com/kedebug/p/2753615.html
Copyright © 2011-2022 走看看