循环字符串最大最小表示法模版

循环字符串最大最小表示法模版

定义字符串abcde和cdeab同构,因为abcde转两格即为cdeab,该字符串称为循环字符串。

循环字符串的字典序最小的同构字符串称为最小表示,最大表示同理。

这里只给模版,以后再深究。

int getMin(char *s) ///返回首位置

{

    int n=strlen(s);

    int i=0,j=1,k=0;

    while(i<n&&j<n&&k<n){

        int t=s[(i+k)%n]-s[(j+k)%n];

        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 getMax(char *s)

{

    int n=strlen(s);

    int i=0,j=1,k=0;

    while(i<n&&j<n&&k<n){

        int t=s[(i+k)%n]-s[(j+k)%n];

        if(!t) k++;

        else{

            if(t<0) i+=k+1;

            else j+=k+1;

            if(i==j) j++;

            k=0;

        }

    }

    return min(i,j);

}
View Code

 

你可能感兴趣的:(字符串)