输入一个长度为n(n<=100)的环状DNA串(只包含A,C,G,T这4种字符)的一种表示法,锂的任务是输出该环状串的最小表示(字典序最小)。例如:CTCC的最小表示为CCCT,CGAGTCAGCT的最小表示为AGCTCGAGTC。
//用ans表示目前为止,字典序最小串在输入串中的起始位置,然后不断更新ans
#include<stdio.h>
#include<string.h>
#define maxn 105
//环状串s的表示法P是否比表示法q的字典序小
int less(const char *s,int p,int q)
{
int n=strlen(s);
for(int i=0;i<n;i++)
{
if(s[(p+i)%n]!=s[(q+i)%n])
{
return s[(p+i)%n]<s[(q+i)%n];
}
return 0; //相等
}
}
int main()
{
int t;
char s[maxn];
scanf("%d",&t);
while(t--)
{
scanf("%s",s);
int ans=0;
int n=strlen(s);
for(int i=1;i<n;i++)
{
if(less(s,i,ans))
{
ans=i;
}
}
for(int i=0;i<n;i++)
{
putchar(s[(i+ans)%n]);
}
putchar('\n');
}
return 0;
}