UVa 455 Periodic Strings

来源:互联网 发布:淘宝如何查看消费总额 编辑:程序博客网 时间:2024/05/29 08:15

Problem Description

如果一个字符串可以由某个长度为k的字符串重复多次得到,则称该串以k为周期。例如,abcabcabc以3为周期

Sample Input

1
HoHoHo

Sample Output

2

代码:

#include<stdio.h>#include<string.h>int next[100];void get_next(char s[])//获取next数组{    int i, j, len = strlen(s);    next[0] = 0;    for(i = 1; i < len; i++)    {        j = next[i-1];        while(j > 0 && s[j] != s[i])        {            j = next[j - 1];        }        if(s[i] == s[j])        {            next[i] = j + 1;        }        else        {            next[i] = 0;        }    }}int main(){    int len, t, i;    char str[100];    scanf("%d", &t);    while(t--)    {        scanf("%s", str);        get_next(str);        len = strlen(str);        for(i = 0; i < len; i++)//判断是否是循环节        {            if(str[i] != str[(i + (len - next[len - 1]))%len]) break;//不是就break        }        if(i == len) printf("%d\n", (len - next[len - 1]));//else printf("%d\n", len);//输出长度        if(t) printf("\n");    }    return 0;}
0 0
原创粉丝点击