int miniexpress (char* s, int n) {
int p = 0, q = 1;
while (p < n && q < n) {
int i;
for (i = 0; i < n; i++)
if (s[(p+i)%n] != s[(q+i)%n]) break;
if (s[(p+i)%n] < s[(q+i)%n])
p = p + i + 1;
else
q = q + i + 1;
if (p == q) q = p + 1;
}
return min(p, q);
}
https://wenku.baidu.com/view/c6c5e7335a8102d276a22fa6.html
int get_min()
{
int i=0,j=1,k=0,t,l=strlen(s);
while(i<l&&j<l&&k<l)
{
t=s[(j+k)%l]-s[(i+k)%l];
if(!t)
k++;
else
{
if(t>0)
j=j+k+1;
else
i=i+k+1;
if(i==j)
j++;
k=0;
}
}
return (i<j?i:j);
}
int get_max()
{
int i=0,j=1,k=0,t,l=strlen(s);
while(i<l&&j<l&&k<l)
{
t=s[(j+k)%l]-s[(i+k)%l];
if(!t)
k++;
else
{
if(t<0)
j=j+k+1;
else
i=i+k+1;
if(i==j)
j++;
k=0;
}
}
return (i<j?i:j);
}