字符串的最小和最大表示法
将字符串分成任意非空的两部分,颠倒顺序后再重组,得到的字符串称为是原字符串的一种表示法(也称循环同构),在一个字符串的所有表示法中,字典序最小的称为最小表示法,最大的称为最大表示法。
求一个字符串的最小最大表示法板子
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 条评论