转载自:https://blog.csdn.net/snowy_smile/article/details/48033845
int MinimumRepresentation(string s)
{
int i = 0, j = 1;
int k = 0;
int len = s.size();
while(i < len && j < len && k < len)
{
int t = s[(i + k) % len] - s[(j + k) % len];//比较俩个串的相对大小
if(t == 0) //若相等,比较位置右移一位
k++;
else//若不同,则字典序大的那一位不可能是最终的答案,改变该指针位置
{
if(t > 0)//位置i的字典序大
i += k + 1;
else if(t < 0) //位置j的字典序大
j += k + 1;
if(i == j) //i和j位置要错开
j++;
k = 0; //重置匹配长度
}
}
return i < j? i:j; //因为字典序大的位置被后移了,所以字典序小的位置就是最终的答案
}
P1709 隐藏口令Hidden Password
P1368 工艺 /【模板】最小表示法