最小表示法

一个循环的串,选出一个开始位置,使得顺序表示的字符串字典序最小

想到最小表示法,说多了都是泪

如果判断两个循环字符串是否相等,那么只要比较他们的最小表示法是否相等就行了

 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 }
View Code

 

posted @ 2016-08-10 17:10  N维解析几何  阅读(123)  评论(0编辑  收藏  举报