Python-40:环状DNA序列的最小表示法

问题描述

小C正在研究一种环状的 DNA 结构,它由四种碱基ACGT构成。这种环状结构的特点是可以从任何位置开始读取序列,因此一个长度为 n 的碱基序列可以有 n 种不同的表示方式。小C的任务是从这些表示中找到字典序最小的序列,即该序列的“最小表示”。

例如:碱基序列 ATCA 从不同位置读取可能的表示有 ATCATCAACAATAATC,其中 AATC 是字典序最小的表示。

代码

def solution(dna_sequence):

    # Please write your code here

    dna_sequences_set = set()

    n = len(dna_sequence)

    for i in range(n):

        new_sequence = ''.join(dna_sequence[(i + j) % n] for j in range(n))

        dna_sequences_set.add(new_sequence)

    dna = min(dna_sequences_set, key=lambda x: (x, len(x)))

    return dna

if __name__ == "__main__":

    #  You can add more test cases here

    print(solution("ATCA") == "AATC")

    print(solution("CGAGTC") == "AGTCCG")

    print(solution("TCATGGAGTGCTCCTGGAGGCTGAGTCCATCTCCAGTAG") == "AGGCTGAGTCCATCTCCAGTAGTCATGGAGTGCTCCTGG")

你可能感兴趣的:(每日一练,python,开发语言)