标签:
| 描述: |
题目标题:
如果一个字符串可以由某个长度为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;
}
标签:
原文地址:http://blog.csdn.net/wljwsj/article/details/45479447