ZOJ_1905_Power Strings 进击のkmp

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;
}

你可能感兴趣的:(ZOJ_1905_Power Strings 进击のkmp)