【2024字节青训·易】环状DNA序列整理

【2024字节青训·易】环状DNA序列整理

问题描述

环状 DNA 又称超螺旋,即一段碱基序列呈现环状,在分析时,需要将相同序列的环状 DNA 分到相同组内,现需将环状碱基序列按照最小表示法进行排序。

一段长度为 n 的碱基序列,按照顺时针方向,碱基序列可以从任意位置起开始该序列顺序,因此长度为 n 的碱基序列有 n 种表示法。例如:长度为 6 的碱基序列 CGAGTC,有 CGAGTCGAGTCCAGTCCG 等表示法。在这些表示法中,字典序最小的称为“最小表示”。

输入一个长度为 nn <= 100)的环状碱基序列(只包含 ACGT 这 4 种碱基)的一种表示法,输出该环状碱基序列的最小表示。

例如:

ATCA` 的最小表示是 `AATC
CGAGTC` 的最小表示是 `AGTCCG

输入描述

一段 DNA 碱基序列

输出描述

DNA 碱基序列的最小表示

*备注*

n <= 100

DNA 由大写英文字母 AGCT 组成

*示例 1*

输入:ATCA

输出:AATC

*示例 2*

输入:CGAGTC

输出:AGTCCG

题解

对于这个问题,既然要求环的问题,直接字符串后面复制一串,然后限定好其每次扫描的长度为原DNA字符串的长度,然后打擂台比较字典序即可~~

def solution(dna_sequence):
    doubled_dna = dna_sequence + dna_sequence
    #print(doubled_dna)
    result_list = list(doubled_dna)
    #print(result_list)

    min_order = dna_sequence
    for i in range(1,len(dna_sequence)):
        substring = doubled_dna[i:i + len(dna_sequence)]
        if(min_order >= substring):
            min_order = substring
    return min_order

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值