所属专题:[字符串算法](README.md)
 
## 问题
**输入:** 两条DNA序列`$ s $`与`$ t $`,每条序列长度均不超过1 kb.
**输出:** 在序列`$ s $`中所有基序`$ t $`的左端位置。最左端的位置从1开始计算。
**样例数据:**
~~~
GATATATGCATATACTT
ATAT
~~~
**样例输出:**
~~~
2 4 10
~~~
 
## 背景知识
该问题涉及“基序(motif)”的概念。简单来说,基序是一段短的特定的DNA/RNA/蛋白质序列。不同物种、不同来源的序列如果共享了某一段基序,表明该共享片段可能具有一定的结构或功能特性,或存在一定的保守性。基序,乃至蛋白质高级结构中的“结构域”,是分子生物学中的重要研究对象。详情请查阅ROSALIND网站上[关于该问题的背景说明](http://rosalind.info/problems/subs/)。
 
## 解答
```
def find_motif(s, t):
"""在序列s中找出基序t的所有起始位置(左端从1开始计数)"""
pos = []
for i in range(len(s)-len(t)+1):
if s[i:i+len(t)]==t:
pos.append(str(i+1))
if len(pos)==0:
pos.append(str(-1))
return pos
## --main--
with open("rosalind_subs.txt", 'r') as f1:
s = f1.readline().strip()
t = f1.readline().strip()
motif_pos = find_motif(s, t)
with open("rosalind_subs_out.txt", 'w') as f2:
f2.write(' '.join(motif_pos))
```