环状 DNA 序列的最小表示法 | 豆包MarsCode AI刷题

109 阅读1分钟

AI刷题打卡-Day1

[简]环状 DNA 序列的最小表示法 | 豆包MarsCode AI刷题

环状 DNA 序列的最小表示法

豆包AI给出的思路和Code实现:

  • 给定一个长度为 n 的序列,我们可以从任意位置开始读取,因此我们可以通过将序列拼接到自己后面来简化处理:例如,对于序列 s = "ATCA",我们可以考虑 s + s = "ATCAATCA",这样我们就能得到所有可能的 n 个表示。

  • 遍历s + s 中的所有长度为 n 的子串,并比较它们的字典序即可。

代码:

def solution(dna_sequence):
    ans = []
    
    for i in range(len(dna_sequence)):
        res = ""
        for j in range(len(dna_sequence)):
            res += dna_sequence[(i + j) % len(dna_sequence)]  # 轮转拼接
        ans.append(res)
    
    ans.sort()  # 对结果进行排序
    return ans[0]  # 返回字典序最小的轮转序列

if __name__ == "__main__":
    #  You can add more test cases here
    print(solution("ATCA") == "AATC")
    print(solution("CGAGTC") == "AGTCCG")
    print(solution("TCATGGAGTGCTCCTGGAGGCTGAGTCCATCTCCAGTAG") == "AGGCTGAGTCCATCTCCAGTAGTCATGGAGTGCTCCTGG")