字符串最大最小表示法

对于一个字符串,比如: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);
}

results matching ""

    No results matching ""