串的最小表示和最大表示
给定一个环形的字符串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) }