所屬專題:[字符串算法](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))
```