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]<s[(q+i)%n]
    return 0
s="CTCC"
ans=0
len_s=len(s)
print(len_s)
for i in range(len_s):
    if less(s,i,ans): ans=i
for i in range(len_s):
    print(s[(i+ans)%len_s])

輸出爲

4
C
C
C
T

其實上面的這種寫法理解起來也挺簡單的。主要就是遍歷整個字符串,由ans保存當前的最小字典序的索引號,然後後面捅過less(s,i,ans)再去獲取更小的字典序索引號。之所以要%n取模是爲了能夠比較整個句子,而不是到n就截止,將這些字符排序變爲環形的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章