如果一个字符串由n个长度为K的字符串重复组成,则长度为k的字符串为重复串。
如:字符串“abcabcabc"的重复串为“abc" 或”“abcabcabc";
从上边的例子可知:重复串满足下面条件:
设:Lengthparent 为整个字符串的长度, LengthChild为重复串的长度,则 Lengthparent % LengthChild = 0;即 重复串能被父字符串长度整除。
所有每次比较的位置都是能整除字符串长度的索引处,而且每次比较的字符间距为字串长度。
程序如下:
void CalculateMinPeriodString(char* pContent)
{
if (pContent == NULL)
{
return;
}
int iLength = strlen(pContent);
for (int i = 1; i <= iLength; ++i)
{
if (iLength % i == 0)
{
int iFindFlag = 1;
for (int j = i; j < iLength; ++j)
{
if (pContent[j] != pContent[j%i])
{
iFindFlag = 0;
break;
}
}
if (iFindFlag == 1)
{
cout << "Min period string length is : " << i << endl;
break;
}
}
}
}