周期串问题(二)
【摘要】 题目:
题目一[周期串问题]
如果一个字符串可以由某个长度为k的字符串重复多次得到,我们说该串以k为周期。例如,abcabcabcabc以3为周期(注意,它也可以6和12为周期,结果取最小周期3)
代码如下:
#include<string>#include<iostream>using namespace st...
题目:
题目一[周期串问题]
如果一个字符串可以由某个长度为k的字符串重复多次得到,我们说该串以k为周期。例如,abcabcabcabc以3为周期(注意,它也可以6和12为周期,结果取最小周期3)
代码如下:
-
#include<string>
-
#include<iostream>
-
using namespace std;
-
-
int GetMinPeriod(char* string) {
-
if (string == NULL) {
-
return -1;
-
}
-
int length = 0; //这个地方要记得初始化,不然打印出来长度为负数出来
-
// while (*string++) { 不能这样写,因为把字符串的指针改变了,求长度我们需要用哥变量来保存然后求得,或者用int length = strlen(string);
-
// length++;
-
// }
-
char* p = string;
-
while (*p++) {
-
length++;
-
}
-
bool isReturn = true;
-
for (int i = 1; i <= length; i++) {
-
isReturn = true;
-
if (length % i !=0) {
-
// return -1; 这个时候不是跳出而是跳过所以要用countine
-
continue;
-
}
-
for (int j = 0; j < length - i; j++) {
-
if (string[j] != string[j+i]) {
-
isReturn = false;
-
break;
-
}
-
}
-
if (isReturn) {
-
return i;
-
}
-
}
-
return length;
-
}
-
int main(){
-
cout<<"hello wordd"<<endl;
-
int length = GetMinPeriod("abcabc");
-
cout<<length<<endl;
-
}
结果打印出:3
文章来源: chenyu.blog.csdn.net,作者:chen.yu,版权归原作者所有,如需转载,请联系作者。
原文链接:chenyu.blog.csdn.net/article/details/52177229
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)