周期串问题(二)

举报
chenyu 发表于 2021/07/27 01:12:35 2021/07/27
【摘要】 题目:   题目一[周期串问题] 如果一个字符串可以由某个长度为k的字符串重复多次得到,我们说该串以k为周期。例如,abcabcabcabc以3为周期(注意,它也可以6和12为周期,结果取最小周期3) 代码如下:   #include<string>#include<iostream>using namespace st...

题目:

 

题目一[周期串问题]

如果一个字符串可以由某个长度为k的字符串重复多次得到,我们说该串以k为周期。例如,abcabcabcabc以3为周期(注意,它也可以6和12为周期,结果取最小周期3)

代码如下:

 


  
  1. #include<string>
  2. #include<iostream>
  3. using namespace std;
  4. int GetMinPeriod(char* string) {
  5. if (string == NULL) {
  6. return -1;
  7. }
  8. int length = 0; //这个地方要记得初始化,不然打印出来长度为负数出来
  9. // while (*string++) { 不能这样写,因为把字符串的指针改变了,求长度我们需要用哥变量来保存然后求得,或者用int length = strlen(string);
  10. // length++;
  11. // }
  12. char* p = string;
  13. while (*p++) {
  14. length++;
  15. }
  16. bool isReturn = true;
  17. for (int i = 1; i <= length; i++) {
  18. isReturn = true;
  19. if (length % i !=0) {
  20. // return -1; 这个时候不是跳出而是跳过所以要用countine
  21. continue;
  22. }
  23. for (int j = 0; j < length - i; j++) {
  24. if (string[j] != string[j+i]) {
  25. isReturn = false;
  26. break;
  27. }
  28. }
  29. if (isReturn) {
  30. return i;
  31. }
  32. }
  33. return length;
  34. }
  35. int main(){
  36. cout<<"hello wordd"<<endl;
  37. int length = GetMinPeriod("abcabc");
  38. cout<<length<<endl;
  39. }


结果打印出:3

 

 

文章来源: chenyu.blog.csdn.net,作者:chen.yu,版权归原作者所有,如需转载,请联系作者。

原文链接:chenyu.blog.csdn.net/article/details/52177229

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。