字符串最大最小表示法
对于一个字符串,比如:00ab
它的变形有四种: 00ab
,0ab0
,ab00
,b00a
那么找到其中字典序最小的一个用的算法就是这个
代码:
//返回最大最小表示法的第一个字母的位置
int min_max_express(string s,bool flag)//参数为true时求最小表示法,为false为最大表示法
{
int i=0,j=1,k=0;
int len=s.length();
while(i<len&&j<len&&k<len)
{
int t=s[(j+k)%len]-s[(i+k)%len];
//二者相等,后移
if(t==0) k++;
else
{
if(flag)
{
if(t>0) j+=k+1;
else i+=k+1;
}
else
{
if(t>0) i+=k+1;
else j+=k+1;
}
if(i==j) j++;
k=0;
}
}
return min(i,j);
}