zoukankan      html  css  js  c++  java
  • poj 2406 Power Srings (kmp循环节) (经典)

    <题目链接>

    题目大意:

    给出一个字符串,求其字串在该字符串中循环的最大周期。

    解题分析:

    length=len-Next[len],len为该字符串的最小循环节,如果len%length==0,那么周期就为len/lenght,如果不能整除,则说明该字符串的字串不具有周期性,输出1。

     KMP最小循环节的证明 >>>

    #include <cstdio>
    #include <cstring>
    
    const int maxn = 1000000 + 100;
    
    char str[maxn];
    int Next[maxn];
    
    void get_next()
    {
        int j = 0, k = -1;
        Next[0] = -1;
        while (str[j])
        {
            if (k == -1 || str[j] == str[k])
                Next[++j] = ++k;
            else
                k = Next[k];
        }
    }
    
    int main()
    {
        while (scanf("%s", &str) != EOF)
        {
            if (str[0] == '.')break;
            get_next();
            int len = strlen(str);
            int length = len - Next[len];        //最小循环节,注意,要弄清楚循环节的含义
            
            if (len%length == 0)
            {
                printf("%d
    ", len / length);
            }
            else
                printf("1
    ");
        }
        return 0;
    }

    2018-08-05

  • 相关阅读:
    SpringMVC源码阅读(一)
    Struts2技术内幕-----第七章
    1118 Lining Up
    1146 ID Codes
    1056 IMMEDIATE DECODABILITY
    1028 Web Navigation
    1045 Bode Plot
    1083 Moving Tables
    并查集路径压缩
    线段树
  • 原文地址:https://www.cnblogs.com/00isok/p/9427886.html
Copyright © 2011-2022 走看看