码迷,mamicode.com
首页 > 其他好文 > 详细

最大最小表示法

时间:2019-09-13 18:05:57      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:表示   lap   pen   ring   instr   adb   字符   open   复杂   

目的:已知一个串S,求S的循环的同构字符串S‘中字典序最大/最小的一个,输出其位置,place∈[0,n-1]

设S=bcad,S‘=bcad,cadb,adbc,dbca,最小表示的S‘是adbc,位置是2,最大表示的S‘是dbca,位置是3

时间复杂度:O(n)

 

自用模板:

技术图片
int get_minstring(char *s)  //最小表示法
{
    int len=strlen(s);
    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==0)
            k++;
        else
        {
            if(t>0)
                i=i+k+1;
            else
                j=j+k+1;
            if(i==j)
                j++;
            k=0;
        }
    }
    return min(i,j);
}
 
int get_maxstring(char *s)   //最大表示法
{
    int len=strlen(s);
    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==0)
            k++;
        else
        {
            if(t>0)
                j=j+k+1;
            else
                i=i+k+1;
            if(i==j)
                j++;
            k=0;
        }
    }
    return min(i,j);
}
View Code

 

 

...

最大最小表示法

标签:表示   lap   pen   ring   instr   adb   字符   open   复杂   

原文地址:https://www.cnblogs.com/myrtle/p/11517078.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!