青少年编程知识记录 codecoming

【题解】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;  	}  }



作者:亿万年的星光 分类:题解目录 浏览: