我知道有针对 rosalind 挑战的解决方案,但我不希望它们破坏乐趣。我以为我找到了“寻找共享主题”的解决方案,但我的答案一直都是错误的。
问题是关于在给定工作表中找到最长的公共子字符串,该工作表由以“>”开头的行和下一行直到另一行以“>”开头的行组成一个序列。这是它的样子:
>Rosalind_1
GATTACA
>Rosalind_2
TAGACCA
>Rosalind_3
ATACA
大约有一百个 dna 片段,你要找到最长的公共子序列。这是我的方法:
rosa = open("rosalind_lcsm.txt","r")
oku = rosa.readlines()
strs=[]
for line in oku:
if line.startswith(">"):
strs.append("kiko")
else:
strs.append(line)
rosa.close()
strs = strs[1:]
joint = "".join(strs)
joint_s = joint.split("kiko")
theOne = joint_s[0]
rest = joint_s[1:]
start=0
end=1
matches=[]
while end < len(theOne):
end+=1
while all(theOne[start:end] in seq for seq in rest):
end+=1
else:
matches.append(theOne[start:end-1])
end+=1
start=end-1
print(max(matches, key=len))
我的策略是;读取文件,将其拆分为序列,选择第一个序列并将其公共部分与其余部分进行比较。我正在检查至少 2 个匹配项,因为序列由 ATGC 组成,并且肯定会发生 1 个匹配项。它从一个字符开始,并继续将其扩展 1 个字符,直到匹配被破坏。然后它获取最后一个匹配位并附加到一个列表中。然后从它停止的地方重新启动。
我的解决方案给出了答案,但它不是正确的,我无法发现代码中的误导部分。有人可以尝试了解我的方法并就修复它给我建议吗?