Power Strings

题目大意:叙述的比较高大上,其实就是一个字符串B = AAAAAAA,求出来这个A最短有多长
 
分析:注意如果这个串不是完全循环的,那么循环节就是就是它本身。
 
代码如下:
#include<stdio.h>
#include<string.h>

const int MAXN = 1e6+7;
const int oo = 1e9+7;

char s[MAXN];
int next[MAXN];

void GetNext(int N)
{
    int i=0, j=-1;
    next[0] = -1;

    while(i < N)
    {
        if(j==-1 || s[i]==s[j])
            next[++i] = ++j;
        else
            j = next[j];
    }
}

int main()
{

    while(scanf("%s", s), strcmp(s, "."))
    {
        int N = strlen(s);

        GetNext(N);

        int circle = N - next[N];

        if(N % circle == 0)
            printf("%d
", N/circle);
        else
            printf("1
");
    }

    return 0;
}
原文地址:https://www.cnblogs.com/liuxin13/p/4730950.html