串的最小表示和最大表示

给定一个环形的字符串s,求字符串t,使得t是所有与s长度相同的字串里字典序最小的字符串和最大的字符串

例如:

abcdaad 的最小字符串是 aadabcd,最大字符串是dabcdaa

‘5612358’的最小字符串是 ‘1235856’,最大字符串是‘8561235’

 

//返回字符串的最小表示
function getMin(s) {
    let i,j,k,l;
    const N=s.length;
    s+=s;
    for(i=0,j=1;j<N;){
        for(k=0;k<N && s[i + k] === s[j + k];k++);
        if(k>=N)break;
        if(s[i+k]<s[j+k])
            j+=k+1;
        else{
            l=i+k;
            i=j;
            j=Math.max(l,j)+1;
        }
    }

    return s.substr(i,N)
}

//返回字符串的最大表示
function getMax(s) {
    let i, j, k, l;
    const N = s.length;
    s += s;
    for (i = 0, j = 1; j < N;) {
        for (k = 0; k < N && s[i + k] === s[j + k]; k++) ;
        if (k >= N) break;
        if (s[i + k] > s[j + k])
            j += k + 1;
        else {
            l = i + k;
            i = j;
            j = Math.max(l, j) + 1;
        }
    }

    return s.substr(i, N)
}

  

  

posted @ 2019-05-30 12:36  无工时代  阅读(261)  评论(0编辑  收藏  举报