python 环形序列

长度为n的环状串有n种表示法,分别为从某个位置开始顺时针得到。在这些表示法中,字典序最小的称为“最小表示”。
输入一个长度为n(n<=100)环状DNA串(只包含A,C,G,T)的一种表示法。任务是输出该环状串的最小表示。例如,CTCC的最小表示为CCCT,CGAGTCAGCT的最小表示为 AGCTCGAGTC。

def less(s,p,q):
    n=len(s)
    for i in range (n):
        if(s[(p+i)%n]!=s[(q+i)%n]):
            return s[(p+i)%n]

输出为

4
C
C
C
T

其实上面的这种写法理解起来也挺简单的。主要就是遍历整个字符串,由ans保存当前的最小字典序的索引号,然后后面捅过less(s,i,ans)再去获取更小的字典序索引号。之所以要%n取模是为了能够比较整个句子,而不是到n就截止,将这些字符排序变为环形的。

你可能感兴趣的:(算法题,算法,python)