环形字符串求最小字典序

#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\n",work(strlen(str))+1);
    }
    return 0;
}

 

posted @ 2013-10-30 17:13  crazy_apple  阅读(631)  评论(0编辑  收藏  举报