描述: |
题目标题:
如果一个字符串可以由某个长度为k的字符串重复多次得到,我们说该串以k为周期。 例如,abcabcabcabc以3为周期(注意,它也可以6和12为周期,结果取最小周期3)。 字符串的长度小于等于100,由调用者保证。 详细描述:
原型: int GetMinPeriod(char *inputstring); 输入参数: char * inputstring:字符串 返回值: int 字符串最小周期 |
知识点: |
涉及知识点:
性能要求:
建议代码行:
圈复杂度要求:
|
题目来源: | 软件训练营 |
练习阶段: | 初级 |
对于这种题目非常经典,是对字符串基本功的考查,最小周期必然是一个大于0且小于字符串长度的数字,所以我们可以初始化周期count=1,然后间隔count的字符相比较,若碰到不匹配的情况,则修改count++,继续间隔count的字符进行比较。需要注意的问题是剩下的字符不够比较怎么办,例如字串abcabdabc,当count=6的时候,最开始的abc和最后的abc是可以匹配的,结束循环后会返回周期count=6,这是有问题的,所以还要判断count与剩下要比较的字符数,对于这个字串长度为9,则6>9-6,则直接返回9。代码放在这里作存档~
#include<iostream> #include<string> using namespace std; /* 功能:计算字符串的最小周期。 原型: int GetMinPeriod(char *string); 输入参数: char * string:字符串。 返回值: int 字符串最小周期。 */ int GetMinPeriod(char *inputstring) { /*在这里实现功能*/ int i; int count=1; for(i=0;i+count<strlen(inputstring);i++) { if(inputstring[i]!=inputstring[i+count]) { count++; if(count>strlen(inputstring)-count) return strlen(inputstring); i=0; } } return count; return 0; } int main() { cout<<GetMinPeriod("abcdbcabc")<<endl; return 0; }
时间: 2024-10-05 21:18:53