最大最小表示法

Posted myrtle

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最大最小表示法相关的知识,希望对你有一定的参考价值。

目的:已知一个串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

 

 

...

以上是关于最大最小表示法的主要内容,如果未能解决你的问题,请参考以下文章

HDU 3374 exkmp+字符串最大最小表示法

hdu3374 String Problem 最小最大表示法 最小循环节出现次数

HDU 3374 最小/大表示法+KMP

网络流的最大流和最小流是啥算法

字符串的最小最大表示法O(n)

SQL分组查询最大值最小值