字符串的最小和最大表示法

将字符串分成任意非空的两部分,颠倒顺序后再重组,得到的字符串称为是原字符串的一种表示法(也称循环同构),在一个字符串的所有表示法中,字典序最小的称为最小表示法,最大的称为最大表示法。
求一个字符串的最小最大表示法板子
s的下标是从0开始的!

int Getmin(char *s,int len){
    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) 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 Getmax(char *s,int len){
    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) k++;
        else{
            if (t<0)    i = i+k+1;
            else    j = j+k+1;
            if (i==j)   j++;
            k = 0;
        }
    }
    return min(i,j);
}
分类: 字符串

0 条评论

发表评论

邮箱地址不会被公开。