Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1411741
  • 博文数量: 241
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 2253
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-11 22:27
个人简介

--

文章分类

全部博文(241)

文章存档

2021年(3)

2019年(6)

2018年(1)

2017年(9)

2016年(21)

2015年(50)

2014年(125)

2013年(26)

我的朋友

分类: C/C++

2014-03-20 14:59:34

1、题目描述
如果一个字符串可以由某个长度为k的字符串重复多次得到,我们说该串以k为周期。例如,abcabcabcabc以3为周期(注意,它也可以6和12为周期,结果取最小周期3)。字符串的长度小于等于100,由调用者保证。
详细描述:
接口说明
原型:
    int GetMinPeriod(char *inputstring);
输入参数:
    char * inputstring:字符串
返回值:
    int 字符串最小周期
2、代码

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include "OJ.h"

  4. /*
  5. 功能:计算字符串的最小周期。
  6. 原型:
  7.     int GetMinPeriod(char *string);

  8. 输入参数:
  9.     char * string:字符串。

  10. 返回值:
  11.     int 字符串最小周期。

  12. */

  13. int GetMinPeriod(char *inputstring)
  14. {
  15.     /*在这里实现功能*/
  16.     if (NULL==inputstring)
  17.     {
  18.         return 0;
  19.     }
  20.     int len = strlen(inputstring);
  21.     if (len == 1)
  22.     {
  23.         return len;
  24.     }
  25.     if (len == 2)
  26.     {
  27.         if (inputstring[0] == inputstring[1])
  28.         {
  29.             return 1;
  30.         }
  31.         else
  32.         {
  33.             return 2;
  34.         }
  35.     }
  36.     int i,j,per;
  37.     int flag = 0;
  38.     int count = 0;
  39.     for (i=2; i<=len/2; ++i)
  40.     {
  41.         per = i;
  42.         if (len % per == 0)
  43.         {
  44.             for (j=per;j<len;j+=per)
  45.             {
  46.                 if (strncmp(inputstring,inputstring+j,per) == 0)
  47.                 {
  48.                     ++count;
  49.                     continue;
  50.                 }
  51.                 else
  52.                 {
  53.                     break;
  54.                 }
  55.             }
  56.         }
  57.         if (count == len/per-1)
  58.         {
  59.             return per;
  60.         }
  61.     }
  62.     
  63.     if (count == 0)
  64.     {
  65.         for (i=1; i<len; i++)
  66.         {
  67.             if (inputstring[i] != inputstring[0])
  68.             {
  69.                 return len;
  70.             }
  71.         }
  72.         return 1;
  73.     }
  74.     else
  75.     {
  76.         return per;
  77.     }
  78. }
阅读(883) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~