长度为n的环状串有n种表示法,分别为从某个位置开始顺时针得到。 例如,图3-4的环状串有10种表示:
CGAGTCAGCT,GAGTCAGCTC,AGTCAGCTCG等。 在这些表示法中,字典序最小的称为"最小表示"。
CGAGTCAGCT,GAGTCAGCTC,AGTCAGCTCG等。 在这些表示法中,字典序最小的称为"最小表示"。
输入一个长度为n(n≤100)的环状DNA串(只包含A、 C、 G、 T这4种字符)的一种表示法,你的任务是输出该环状串的最小表示。 例如,CTCC的最小表示是CCCT,CGAGTCAGCT的最小表示为AGCTCGAGTC。
#include <stdio.h>
#include <string.h>
#define MAX_NUM 250
int main(void)
{
char data[MAX_NUM];
char buff[MAX_NUM];
int len = 0 , i ;
freopen("input.txt" , "r" , stdin);
freopen("output.txt" , "w" , stdout);
memset(data , 0 , sizeof(data));
memset( buff , 0 , sizeof(buff));
scanf("%s" , data);
strcpy( buff , data);
len = strlen(data);
for( i = 0 ; i < len ; i++)
{
data[len+i] = data[i];
if( strcmp( data+i , buff) < 0 )
{
strcpy(buff , data+i);
buff[len] = '\0';
}
}
printf("%s\n" , buff);
return 0 ;
}