环形字符串求最小字典序

#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
char str[20000];
int work(int m)
{
    int i,j,l;
    i=0; j=1;
    while(i<m && j<m)
    {
        for(l=0;l<m;l++)
            if(str[(i+l)%m]!=str[(j+l)%m]) break;
        if(l>m) break;
        if(str[(i+l)%m] > str[(j+l)%m])
            i=i+l+1;
        else
            j=j+l+1;
        if(i==j) j=i+1;
    }
    if(i<j) return i;
    return j;
}
int main()
{
    int text;
    scanf("%d",&text);
    while(text--)
    {
        scanf("%s",str);
        printf("%d
",work(strlen(str))+1);
    }
    return 0;
}
原文地址:https://www.cnblogs.com/crazyapple/p/3397315.html