字符串的最小表示法

int n=strlen(s+1);
for(int i=1;i<=n;i++) s[n+i]=s[i];
int i=1,j=2,k;
while(1<=n&&j<=n){
    for(k=0;k<=n&&s[i+k]==s[j+k];k++);
    if(k==n) break;//s只由一个字符构成,形如"aaaaa"
    if(s[i+k]>s[j+k]){
        i=i+k+1;
        if(i==j) i++;
    }else{
        j=j+k+1;
        if(i==j) j++;
    }
}
ans=min(i,j);//B[ans]是最小表示

猜你喜欢

转载自blog.csdn.net/algzjh/article/details/81603387
今日推荐