紫书-例题3-6 环状序列(Circular Sequence, ACM/ICPC Seoul 2004, UVa1584)
长度为n的环状串有n种表示法,分别为从某 个位置开始顺时针得到。例如,图3-4的环状串有 10种表示:CGAGTCAGCT,GAGTCAGCTC,AGTCAGCTCG等。在这些表示法中,字典序最 小的称"最小表示"。 输入一个长度为n(n≤100)的环状DNA串 (只包含A、C、G、T这4种字符)的一种表示 法,你的任务是输出该环状串的最小表示。例 如,CTCC的最小表示是CCCT,CGAGTCAGCT 的最小表示为AGCTCGAGTC。
思路
这个题目的基本思路就是扫描一遍字符数组,先默认最小的序列的头元素的所在位置为0,然后扫描,进行比较,如果比当前的最小序列还要小,则更新最小的序列的头元素所在位置。
所以对于
0 1 2 3 4 5 6 7 8 9
CGA G TC A GCT
GAG T CA G CTC (i=1,minn=0)
AGT C AG C TCG (i=2,minn=0) -->return=1–>minn=i=2
GTC A GC T CGA (i=3,minn=2)
TC A G CT C GAG(i=4,minn=2)
CA G C TC G AGT(i=5,minn=2)
AG C TC G A GTC(i=6,minn=2) -->在lesss函数的for循环的i从0开始变化,直到找到与minn不同的位置,未找到则跳出for,返回0;找到则return=1–>minn=i=6
GCTC G AG TC A (i=7,minn=6)
CT CG A GT CAG (i=8,minn=6)
TC GA G TC AGC (i=9,minn=6) 至此遍历完毕得到最优minn=6,再for循环输出结果AGCTCGAGTC
#i