【2024字节青训·易】环状DNA序列整理
问题描述
环状 DNA 又称超螺旋,即一段碱基序列呈现环状,在分析时,需要将相同序列的环状 DNA 分到相同组内,现需将环状碱基序列按照最小表示法进行排序。
一段长度为 n 的碱基序列,按照顺时针方向,碱基序列可以从任意位置起开始该序列顺序,因此长度为 n 的碱基序列有 n 种表示法。例如:长度为 6 的碱基序列 CGAGTC,有 CGAGTC、GAGTCC、AGTCCG 等表示法。在这些表示法中,字典序最小的称为“最小表示”。
输入一个长度为 n(n <= 100)的环状碱基序列(只包含 A、C、G、T 这 4 种碱基)的一种表示法,输出该环状碱基序列的最小表示。
例如:
ATCA` 的最小表示是 `AATC
CGAGTC` 的最小表示是 `AGTCCG
输入描述
一段 DNA 碱基序列
输出描述
DNA 碱基序列的最小表示
*备注*:
n <= 100
DNA 由大写英文字母 A、G、C、T 组成
*示例 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")

6万+

被折叠的 条评论
为什么被折叠?



