给出一个环形字符串,可以从任意一个位置开始顺序的读,求出字典序最小的串。
#include<string.h>
#include<cstdio>
#define MAXN 20010
char string[MAXN];
char s[MAXN];
using namespace std;
long p,q;
int main()
{
long cases,tp,tq,len,i;
scanf("%ld",&cases);
while(cases--)
{
scanf("%s",string);
len=strlen(string);
for(i=0;i<len;i++)
s[i]=s[len+i]=string[i];
p=0;
q=1;
while(q<len)
{
tp=p;
tq=q;
while(tp-p<len)
{
if(s[tp]==s[tq])tp++,tq++;
else if(s[tp]<s[tq])
{
q=tq+1;
break;
}
else
{
p=tp+1;
if(q<=p)q=p+1;
break;
}
}
if(tp-p==len)break;
}
for(i=p;i<p+len;i++)
printf("%c",s[i]);
printf("\n");
}
return 0;
}