UVa 455(Periodic Strings)

来源:互联网 发布:java正则表达式 匹配: 编辑:程序博客网 时间:2024/06/05 19:41
该题的数据量小,直接暴力枚举:依次枚举循环节的长度,进行测试


//我自己写的,比较麻烦,虽然也AC了#include<iostream>#include<string.h>using namespace std;char str[100];int main(void){int N, len, period;bool flag;cin >> N;while (N--){cin >> str;len = strlen(str);for (int i = 1; i <= len; i++){flag = true;if (len%i == 0){if (len / i == 1){period = len;}else{//下面对该字符串中每两个相邻“子串”都进行相互比较for (int k = 1; (k <= len / i - 1) && flag; k++){for (int j = k*i - i; (j < k*i) && flag; j++){if (str[j] != str[j + i]){flag = false;break;}}}if (flag) period = i;}if (flag){cout << period << endl;break;}}}if (N) cout << endl;}return 0;}//参考别人的代码改进的#include<iostream>#include<string.h>using namespace std;char str[100];int main(void){int N;cin >> N;while (N--){cin >> str;int len = strlen(str);for (int i = 1; i <= len; ++i){if (len%i == 0){int j;for (j = i; j < len; ++j){//利用周期性~j%i回到第一个周期的串//将后面的串,循环与第一个周期的串的各个字母比较if (str[j] != str[j%i]) break;}if (j == len){cout << i << endl;break;}}}if (N) cout << endl;}return 0;}


原创粉丝点击