ZOJ_1905_Power Strings 进击のkmp
ZOJ_1905_Power Strings 进击のkmp
電泡泡 发表于5年前
ZOJ_1905_Power Strings 进击のkmp
  • 发表于 5年前
  • 阅读 17
  • 收藏 0
  • 点赞 0
  • 评论 0

标题:腾讯云 新注册用户域名抢购1元起>>>   

Power Strings Time Limit: 5 Seconds       Memory Limit: 32768 KB

Given two strings a and b we define a*b to be their concatenation. For example, if a = "abc" and b = "def" then a*b = "abcdef". If we think of concatenation as multiplication, exponentiation by a non-negative integer is defined in the normal way: a^0 = "" (the empty string) and a^(n+1) = a*(a^n).


Input

Each test case is a line of input representing s, a string of printable characters.


Output

For each s you should print the largest n such that s = a^n for some string a. The length of s will be at least 1 and will not exceed 1 million characters. A line containing a period follows the last test case.


Sample Input

abcd
aaaa
ababab
.


Sample Output

1
4
3


#include <iostream>
#include <string>
using namespace std;

int next[1000002];
string str;
int len;

void get_next(string T, int next[])
{
    int i,j;
    next[1]=0;
    j=0;i=1;
    while(i<len)//不要等于m
    {
        if(j==0||T[i]==T[j]){
            ++i;
            ++j;//这个地方完全可以弄到m所以等于的时候不用继续循环
            if(T[i]!=T[j])
                next[i]=j;
            else
                next[i]=next[j];
        }
        else
            j=next[j];
    }
}

int
main()
{
    while(cin>>str && str!="."){
        len=str.length();
        get_next(str, next);
        if(len%(len-next[len])==0)
            cout<<len/(len-next[len])<<endl;
        else
            cout<<"1"<<endl;
    }
    return 0;
}

共有 人打赏支持
粉丝 25
博文 181
码字总数 69717
×
電泡泡
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: