本文主要是介绍UVa 455 周期串 (Periodic Strings),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目意思:
如果一个字符串可以由某个长度为k的字符串重复多次得到,则称该串以k为周期。例如,abcabcabcabc以3为周期(注意6,12也为周期 ),求的是最小周期。
实现:
#include<stdio.h>
#include<string.h>
#define maxn 100000
int main(){char s[maxn];int n, i;int ok;
// freopen("C:\\Users\\zhangwei\\Desktop\\input.txt","r",stdin);
// freopen("C:\\Users\\zhangwei\\Desktop\\output.txt","w",stdout);scanf("%d",&n);while(n--){getchar();//这个最好加上 防止换行符 不过没加的时候也AC了scanf("%s",&s);int len = strlen(s);for(i = 1; i <= len; i++ ){//i表示周期 要可以取到 len(注意)ok = 1; //循环开始 置为1if(len % i == 0){//首先要满足 周期能被 字符串长度整除 不然失去意义了for(int j = 0; j < len; j++ ){//这里是扫描字符(不可以取到len 因为数组越界)if(s[j] != s[j%i]){// 核心ok = 0;break;}} if(ok)//目的找到最小的周期 就退出循环break;}}if(ok){//题目要求Outpu 空一个空行printf("%d\n",i); if(n)//最后一个 不能 有空行printf("\n");}} return 0;}
这篇关于UVa 455 周期串 (Periodic Strings)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!