最小表示法:
int GetMin(char *str)
{
int i,j,k;
i=0,j=1,k=0;
while(i<n && j<n && k<n)
{
int t=str[i+k] - str[j+k];
if(t==0)
k++;
else
{
if(t>0)
{
j=j+k+1;
if(i==j)
j++;
}
else
{
i=i+k+1;
if(i==j)
i++;
}
k=0;
}
}
i=min(i,j);
return i;
}
最大表示法:
int GetBig(char *x)
{
int i = 0, j = 1, k;
while(i < n && j < n)
{
while(x[i+k] == x[j+k] && k < n) k++;
if (k == n) //这个意思就是以i开头的和以j开头的字符串相同
{
int len = abs(i - j); //len的长度就是循环节
return n - len + i; //取坐标最大的
}
else
{
int t = x[i+k] - x[j+k];
if(t>0) j+=k+1;
else i+=k+1;
if(i==j) j++;
k = 0;
}
}
if(j >= n) return i;
return j;
}