【题解】Power Strings
【题目描述】
给定若干个长度 ≤106 的字符串,询问每个字符串最多是由多少个相同的子字符串重复连接而成的。如:ababab 则最多有 3 个 ab 连接而成。
【输入描述】
输入若干行,每行有一个字符串,字符串仅含英语字母。特别的,字符串可能为 . 即一个半角句号,此时输入结束。
【输出描述】
若干行,每个数一行。
【样例输入】
abcd
aaaa
ababab
.
【样例输出】
1
4
3
【参考答案】
#include <bits/stdc++.h>
using namespace std;
bool isRepeat(string str,int len) {
bool flag = true;
for(int i = len; i+len<=str.size(); i+=len) {
for(int j = 0, t =i; j<len; j++,t++) {
if(str[j]!=str[t]) {
flag = false;
break;
}
}
if(!flag) false;
}
return flag;
}
int getM(string str) {
for(int len = 1; len<str.size(); len++) {
if(str.size()%len==0) {
if(isRepeat(str,len)) {
return str.size()/len;
}
}
}
return 1;
}
int main() {
string word;
while(cin>>word) {
if(word==".")break;
int res = getM(word);
cout<<res<<endl;
}
}
扫描二维码推送至手机访问。
版权声明:本文由青少年编程知识记录发布,如需转载请注明出处。