1、题目描述
如果一个字符串可以由某个长度为k的字符串重复多次得到,我们说该串以k为周期。例如,abcabcabcabc以3为周期(注意,它也可以6和12为周期,结果取最小周期3)。字符串的长度小于等于100,由调用者保证。
详细描述:
接口说明
原型:
int GetMinPeriod(char *inputstring);
输入参数:
char * inputstring:字符串
返回值:
int 字符串最小周期
2、代码
-
#include <stdio.h>
-
#include <string.h>
-
#include "OJ.h"
-
-
/*
-
功能:计算字符串的最小周期。
-
原型:
-
int GetMinPeriod(char *string);
-
-
输入参数:
-
char * string:字符串。
-
-
返回值:
-
int 字符串最小周期。
-
-
*/
-
-
int GetMinPeriod(char *inputstring)
-
{
-
/*在这里实现功能*/
-
if (NULL==inputstring)
-
{
-
return 0;
-
}
-
int len = strlen(inputstring);
-
if (len == 1)
-
{
-
return len;
-
}
-
if (len == 2)
-
{
-
if (inputstring[0] == inputstring[1])
-
{
-
return 1;
-
}
-
else
-
{
-
return 2;
-
}
-
}
-
int i,j,per;
-
int flag = 0;
-
int count = 0;
-
for (i=2; i<=len/2; ++i)
-
{
-
per = i;
-
if (len % per == 0)
-
{
-
for (j=per;j<len;j+=per)
-
{
-
if (strncmp(inputstring,inputstring+j,per) == 0)
-
{
-
++count;
-
continue;
-
}
-
else
-
{
-
break;
-
}
-
}
-
}
-
if (count == len/per-1)
-
{
-
return per;
-
}
-
}
-
-
if (count == 0)
-
{
-
for (i=1; i<len; i++)
-
{
-
if (inputstring[i] != inputstring[0])
-
{
-
return len;
-
}
-
}
-
return 1;
-
}
-
else
-
{
-
return per;
-
}
-
}
阅读(942) | 评论(0) | 转发(0) |