nyoj1121周期串

题目链接:http://115.159.40.116/problem_show.php?pid=5661
http://acm.nyist.net/JudgeOnline/problem.php?pid=1121

题目描述

一个字符串可以由长度为k的字符串重复多次得到,我们说该串以k为周期,例如abcabcabcabc  以3为最小周期(注意它也可以以6和12为周期)

我们输入一个不超过200的串,输出它的最小周期(字符串区分大小写)

输入

有多组测试数据,每组输入一个字符串

输出

输出相应字符串的最小周期

样例输入

abcabcabcabc
abcd

样例输出

3
4

本以为普通方法可能会超时,没想到这题只是纯粹的简单题,话不多说下面是AC代码。
#include <stdio.h>
#include <string.h>
int main() {
	char s[250];
	while(~scanf("%s", &s)) {
		int len = strlen(s), f = 1, i, j, k;
		for(i = len; i >= 2; i--) {
			if(len%i == 0) {
				int flag = 0, m = len/i;
				for(j = 0; j < m && flag == 0; j++) {
					for(k = 1; k < i; k++)
					  if(s[j] != s[j+k*m]) {
						  flag = 1;
						  break;
					  }
				}
				if(flag == 0) {
					f = i;
					break;
				}
			}
		}
		printf("%d\n", len/f);
	}
	return 0;
}
一串乱码,你可以试试你的程序是否超时。趴在键盘上睡
sdfjj+jjj=jj&^Wqeuqqqdhnn?"::\454der4*nnnnfklwgjqijr39u21#@8u3tergfgfkwfeqrjrfsofsdjdspfkjpjegfsg[dgqge]]d<ddd55ddwrd964sfgdgdf;hb\fd]gg+df/*gdss'gd;ffdjfd"sbhnamxvn.gerq//?>,lsd+1f\'d2sf+4sfs55dfsd

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值