1. 程式人生 > >187. 重複的DNA序列(中等,字串)(12.24)

187. 重複的DNA序列(中等,字串)(12.24)

所有 DNA 由一系列縮寫為 A,C,G 和 T 的核苷酸組成,例如:“ACGAATTCCG”。在研究 DNA 時,識別 DNA 中的重複序列有時會對研究非常有幫助。

編寫一個函式來查詢 DNA 分子中所有出現超過一次的10個字母長的序列(子串)。

示例:

輸入: s = "AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT"

輸出: ["AAAAACCCCC", "CCCCCAAAAA"]

思路:長度超過10個字母序列,看有沒有重複的,把重複的給輸出來

class Solution(object):
    def findRepeatedDnaSequences(self, s):
        """
        :type s: str
        :rtype: List[str]
        """
        n = len(s)
        st = set()
        ret = set()
        for i in range(n-9):
            cur = s[i:i+10]    #每次前進一個位置,檢查10個字元
            if cur in st:      #st存每次出現的新的10個字元長的串
                ret.add(cur)   #若重複出現,則輸出
            else:
                st.add(cur)
        return list(ret)

執行用時: 80 ms, 在Repeated DNA Sequences的Python提交中擊敗了86.09%的使用者