字符串最小(大)表示法

最小表示法

int min_pos(string str)
{
    int len=str.size();
    int i=0,j=1,k=0;
    while(i<len && j<len && k<len)
    {
        int t=str[(i+k)%len]-str[(j+k)%len];
        if(!t) k++;
        else 
        {
            if(t>0) i+=k+1;
            else j+=k+1;
            if(i==j) j++;
            k=0;
        }
    }
    return min(i,j);
}

最大最小混用

int min_max_pos(int flag)
{
    int i=0,j=1,k=0;int len=strlen(str);//flag==1 代表取小,flag==0 代表取大
    while(i<len && j<len && k<len)
    {
        int t=str[(i+k)%len]-str[(j+k)%len];
        if(!t) k++;
        else 
        {
            if(flag)
            {
                if(t>0) i+=k+1;
                else j+=k+1;
            }else{
                if(t>0) j+=k+1;
                else i+=k+1;
            }

            if(i==j) j++;
            k=0;
        }
        
    }
    return min(i,j);
}
发布了18 篇原创文章 · 获赞 9 · 访问量 876

猜你喜欢

转载自blog.csdn.net/weixin_42859385/article/details/100146181
今日推荐