本文主要是介绍周期串(Periodic Strings),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
做了我两个小时,我真的裂开
之前已经发过一次了,走在回宿舍的路上突然发现有些情况并不适用,赶紧删掉了
题目如下:
如果一个字符串可以由某个长度为k的字符串重复多次得到,则称该串以k为周期。例如:abcabcabcabc以3为周期(注意,它也以6和12为周期)
输入一个长度不超过80的字符串,输出其最小周期
一些测试点:
abcab
abcababcab
ababc
ababcababc
abcababcabcababc
ababcababc
最后一个就是我路上想出来的,上一个代码并不适用的测试点
第一次的思路是一个字符数组记录暂时重复的字符串,另一个是记录和上一个字符数组相同部分的字符串,一旦出现不同,就把第二个字符串接到第一个上面去
第二次的思路是整个字符串都放在一个数组里面,然后用length记录重复串的长度,前length个字符就是重复串,而count记录暂时相同的的字符串长度,然后一一比较,一旦出现不同length就加上count(count为0就加1)
两个思路都不行,问题在于,如果length一下延长很多,可能会出事
那延长的长度控制在1就行了
这是第三个思路
代码如下:
#include<stdio.h>
#include<string.h>int main(void)
{char str[81] = {'\0'};scanf("%s", str);int len = 1, count = 0;for(int i = 1; i < (int)strlen(str); i++)if(str[i] == str[count])count++;elselen++, i = len - 1, count = 0;printf("%d", len);return 0;
}
虽然count会超过len,但是不会影响比较
。。。
或许以后碰到类似的题就可以秒了
引以为戒
看着简单的题还是要多手动写写
这篇关于周期串(Periodic Strings)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!