#P5637. Pku2406 Power Strings题解

Description

求一个字符串由多少个重复的子串连接组成,例如 abababababab 由 33 个 abab 连接而成,因此答案为 33

又例如 abcdabcd 由 11 个 abcdabcd 连接而成,因此答案为 11

Input

多组数据,每组数据,一行给出一个字符串 SS,∣S∣≤106∣S∣≤106

整个测试以 . 代表结束。

Output

每行一个整数,表示答案。

输入数据 1

abcd
aaaa
ababab
.

输出数据 1

1
4
3

思路

kmp

代码见下

#include<bits/stdc++.h>
using namespace std;
long long t,kmp[10000006],as,bs,op=0,db=0;
char a[10000006],b[10000006];
int main(){
    while(cin>>b+1){
        if(b[1]=='.'){
            break;
        }
        db=1;
        bs=strlen(b+1);
                for(int i=2,j=0;i<=bs;i++){
                    while(j!=0&&b[i]!=b[j+1]){
                        j=kmp[j];
                    }
                    if(b[j+1]==b[i]){
                        j++;
                    }
                    kmp[i]=j;
                }
                for(int i=0;i<=bs;i++){
                    b[i]=' ';
                }
        if(bs%(bs-kmp[bs])==0){
            db=bs/(bs-kmp[bs]);
        }
        op=0;   
        cout<<db<<endl;
    }

	return 0;
} 

posted @ 2025-11-11 21:25  bz02_2023f2  阅读(2)  评论(0)    收藏  举报  来源