算法竞赛入门经典:第五章 基础题目选解 5.3 周期串
来源:互联网 发布:天津网络大学 编辑:程序博客网 时间:2024/05/24 07:24
/*周期串:如果一个字符串可以由某个长度为k的字符串重复多次得到,我们说该串以k为周期。例如,abcabcabcabc是以3为周期(注意,它也以6和12为周期)。输入一个长度不超过80的串,输出它的最小周期输入:HoHoHo输出:2思路:关键找到切分点,从n/2长度算起吗,n/2-1长度,一直到1为止。这类似于希尔排序*/#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAXSIZE 1024/*从步长为2开始算起,若能整除,[若计算是周期,[直接输出; [步长累加,若步长超过一半,输出-1 [步长累加,若步长超过一半,输出-1计算周期,0到步长内的每个数字,对每个字符与所有跳跃字符都相同*//*关键:1周期串说白了就是 str[j] = str[j%i],注意步长应该从1开始,而不是从2开始,for(iStep = 1 ; iStep <= iLen/2 ; iStep++)2 书上方法比我简单在:我是选取步长,将步长项全部比较结束。书上:一趟循环直接将所有步长项比结束*/int cycleStrLen_book(char* str){int iLen = strlen(str);int iStep;bool isCycle;for(iStep = 1 ; iStep <= iLen/2 ; iStep++){isCycle = true;for(int j = 0;j < iLen; j++){if(str[j] != str[j % iStep]){isCycle = false;break;}}if(isCycle){break;}}return isCycle ? iStep : 0;}int cycleStrLen(char* str){int iLen = strlen(str);int iStep;bool isCycle; //for(iStep = 2 ; iStep <= iLen/2;iStep++)//步长必须从1开始for(iStep = 1 ; iStep <= iLen/2 ; iStep++){isCycle = true;if(iLen % iStep != 0){isCycle = false;continue;}else{for(int i = 0 ; i < iStep;i++)//每个步长的起始位置{int j = i + iStep;while(j < iLen && str[j-iStep] == str[j])//判断跳跃字符是否都相等{j += iStep;}if(j < iLen){isCycle = false;break;}if(isCycle){break;}}}if(isCycle){break;}}return isCycle ? iStep : -1;}int main(int argc,char* argv[]){char str[MAXSIZE];scanf("%s",str);//printf("%d\n",cycleStrLen(str));printf("%d\n",cycleStrLen_book(str));system("pause");return 0;}
0 0
- 算法竞赛入门经典:第五章 基础题目选解 5.3 周期串
- 《算法竞赛入门经典》 第五章 基础题目选解
- 算法竞赛入门经典-第五章周期串
- 算法竞赛入门经典:第五章 基础题目选解 5.1WERTYU
- 算法竞赛入门经典:第五章 基础题目选解 5.2 Tex
- 算法竞赛入门经典:第五章 基础题目选解 5.4 小学生算术
- 算法竞赛入门经典:第五章 基础题目选解 5.5 高精度乘法
- 算法竞赛入门经典:第五章 基础题目选解 5.6 数组模拟高精度乘法
- 算法竞赛入门经典:第五章 基础题目选解 5.7 6174问题
- 算法竞赛入门经典:第五章 基础题目选解 5.8 字母重排
- 算法竞赛入门经典:第五章 基础题目选解 5.9 Cantor数
- 算法竞赛入门经典:第五章 基础题目选解 5.10 因子和阶乘
- 算法竞赛入门经典:第五章 基础题目选解 5.11果园里的树
- 算法竞赛入门经典:第五章 基础题目选解 5.12多少块土地
- 算法竞赛入门经典 UVa455周期串
- 算法竞赛入门第五章(竞赛题目选讲)解析:
- 【索引】算法竞赛入门经典-第5章 基础题目选解
- 算法竞赛入门经典 第五章 字符串
- 算法竞赛入门经典:第五章 基础题目选解 5.2 Tex
- 22-IO流-30-IO流(转换流的编码解码)
- 各种tabLayout
- C#语法笔记
- Codeforces Round #315 (Div. 2) C. Primes or Palindromes?
- 算法竞赛入门经典:第五章 基础题目选解 5.3 周期串
- 开源中国源码学习(六)——ButterKnife的使用
- 从Lua调用C
- 算法竞赛入门经典:第五章 基础题目选解 5.4 小学生算术
- NGUI研究院之UISprite和UITexture浅谈(十二)(图片大小优化)
- GCD的使用与理解(2)
- double-array-trie双数组trie树原理解析和数据构建过程
- JAVA编程之static、final修饰符
- Linux图形界面与字符界面切换