最小表示法

字符串的最小表示法

定义:如果一个字符串可以循环:如0011100111000110具有这种性质的字符串,那么它一定有一种或者多种最小表示法使得该字符串的字典序最小。

解法:

设三个指针i,j,k;初始化i=0,j=1,k=0;先找到 i+k 和 j+k 的第一个不同的位置下标,那么不同位置之前一定不是最小表示法,因为两个不相等一定有一个比较小,比较更新 i 或者 j 即可。

show code:

int getmin(char *s)
{
    int len=strlen(s);
    int i=0,j=1,k=0,t;
    while(i<len && j<len && k<len){
        t=s[(i+k)%len]-s[(j+k)%len];
        if (!t) k++;
        else{
            if (t>0) i=i+k+1; 
            else j=j+k+1;
            if (i==j) j++;
            k=0;
        }
    }
    return i<j?i:j;
} 
posted @ 2020-02-02 13:47  StungYep  阅读(167)  评论(0编辑  收藏  举报