思路
做前缀求字符串周期,如果是整数周期则输出周期数量,否则输出1
代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
vector<ll> piv;
string s;
vector<ll> pic(string s){
ll len=s.length();
vector<ll> res(len);
res[0]=0;
for(ll i=1;i<len;i++){
ll j=res[i-1];
while(j>0 && s[i]!=s[j]){
j=res[j-1];
}
if(s[i]==s[j]){
j++;
}
res[i]=j;
}
return res;
}
int main(){
while(1){
cin>>s;
if(s=="."){
break;
}
piv=pic(s);
ll t;
if(s.length()%(s.length()-piv[s.length()-1])==0){
t=s.length()/(s.length()-piv[s.length()-1]);
}else{
t=1;
}
printf("%lld",t);
}
return 0;
}
评测记录
链接
感谢大佬