【华为练习题 】 字符串的最小周期(中级)
2016-08-22 14:31
281 查看
【华为练习题 】 字符串的最小周期(中级)
题目
如果一个字符串可以由某个长度为k的字符串重复多次得到,我们说该串以k为周期。例如,abcabcabcabc以3为周期(注意,它也可以6和12为周期,结果取最小周期3)。字符串的长度小于等于100,由调用者保证。 原型: int GetMinPeriod(char *inputstring); 输入参数: char * inputstring:字符串 返回值: int 字符串最小周期
分析
用指针向后寻找与第一个字符相同的字符,找到之后,验证两字符之间的子串是否可以重复得到字符串,如果是,则返回两字符的距离,如果不是,则继续寻找下一个与第一个字符相同的字符。解答
int GetMinPeriod(char *inputstring){ char *ahead = inputstring + 1; // 如果存在不为1的周期,子串长度必然小于等于总长度的一半 while (ahead - inputstring <= (int)strlen(inputstring)/2) { // 周期子串长度必然能被总长度整除 if (*ahead != *inputstring || strlen(inputstring) % (ahead - inputstring)) { ahead++; continue; } char *b = inputstring, *e = ahead; while (*e != '\0') { if (*b != *e) { ahead++; break; } b++; e++; } return ahead - inputstring; } return 1; } int main() { char input[100]; cin.getline(input,100); cout << GetMinPeriod(input) << endl; return 0; }
相关文章推荐
- 周期字符串的最小周期
- 字符串最小周期串问题
- 华为【中级】字符串运用-密码截取
- 周期串 字符串的最小正周期
- [华为机试练习题]3.分解字符串
- 【华为OJ平台练习题】逆序输出字符串
- 字符串最小周期
- [华为机试练习题]1.周期串问题
- [华为机试练习题]12.整型字符串排序
- 华为校招第三题:字符串变换最小费用(动态规划DP问题)
- 华为练习题 求字符串最后一个单词的长度
- 【华为练习题】识别IP地址与掩码(中级)
- 华为OJ中级题-查找两个字符串a,b中的最长公共子串
- 华为训练题:中级——合并字符串
- 字符串最小周期
- kmp求字符串最小周期
- 求字符串的最小周期
- 周期字符串的最小周期
- 最小编辑代价&&华为OJ 编辑距离&&计算字符串的相似度
- [华为机试练习题]43.在字符串中找出连续最长的数字串