一个循环的串,选出一个开始位置,使得顺序表示的字符串字典序最小
想到最小表示法,说多了都是泪
如果判断两个循环字符串是否相等,那么只要比较他们的最小表示法是否相等就行了
1 //s为扩展了一倍的字符串,l为字符串的原长度 2 int minrepress(char s[],int l){ 3 int i=0,j=1,k=0; 4 5 while(i<l&&j<l&&k<l){ 6 if(s[i+k]==s[j+k])k++;//继续比较下一位 7 else{ 8 if(s[i+k]<s[j+k])j+=k+1; 9 //如果上条件成立,那么j-j+k的表示都大于i-i+k的表示 10 else i+=k+1; 11 k=0; 12 if(i==j)j++; 13 } 14 } 15 return min(i,j); 16 }