论文:周源的最小表示法。。百度搜一搜
模板:
int MinRepresstation(string S)//用最小表示法求字符串S的最小字典序 返回字典序最小的串的首字母位置
{
int i = 0, j = 1, k = 0;
int len = S.length();
S += S;
while(i < len && j < len)
{
k = 0;
while(k < len && S[i + k] == S[j + k]) k++;
if(k >= len) break;
if(S[i + k] > S[j + k])
i = max(i + k + 1, j + 1);
else
j = max(i + 1, j + k + 1);
}
return min(i ,j);
}
int MaxRepresstation(string s)//用最大表示法求字符串S的最大字典序 返回字典序最小的串的首字母位置
{
int len = s.size();
int i = 0,j = 1, k = 0;
while(i<len&&j<len&k<len)
{
int t = s[(i + k)%len] - s[(j + k)%len];
if(!t)k++;
else
{
if(t>0) j = j + k + 1;
else i = i + k + 1;
if(i==j) j++;
k = 0;
}
}
return min(i, j);
}