187

发布时间 2023-11-05 15:36:38作者: LYoungH

DNA序列 由一系列核苷酸组成,缩写为 'A''C''G' 和 'T'.。

  • 例如,"ACGAATTCCG" 是一个 DNA序列 。

在研究 DNA 时,识别 DNA 中的重复序列非常有用。

给定一个表示 DNA序列 的字符串 s ,返回所有在 DNA 分子中出现不止一次的 长度为 10 的序列(子字符串)。你可以按 任意顺序 返回答案。

示例 1:

输入:s = "AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT"
输出:["AAAAACCCCC","CCCCCAAAAA"]

思路:直接暴力遍历

第一遍
class Solution(object):
    def findRepeatedDnaSequences(self, s):
        """
        :type s: str
        :rtype: List[str]
        """
        zixulies = list()
        length = len(s)
        for i in range(length-10):
                zixulies.append(s[i:i+10])
        ans = list(set(zixulies))
        re = list()
        for zixulie in ans:
            if zixulies.count(zixulie)>1:
                re.append(zixulie)
        return re

对字符串切片的长度、循环的起止 把握有误 WA

 

第二遍

class Solution(object):
    def findRepeatedDnaSequences(self, s):
        """
        :type s: str
        :rtype: List[str]
        """
        zixulies = list()
        length = len(s)
        for i in range(length-9):
                zixulies.append(s[i:i+10])
        ans = list(set(zixulies))
        re = list()
        for zixulie in ans:
            if zixulies.count(zixulie)>1:
                re.append(zixulie)
        return re

31个测试用例过了30个 超时了

 

第三遍 把第二次的代码给WXYY让他优化时间复杂度

class Solution(object):
    def findRepeatedDnaSequences(self, s):
        """
        :type s: str
        :rtype: List[str]
        """
        dna_sequences = set()  
        seen = set()  
        for i in range(len(s) - 9):  
            sequence = s[i:i+10]  
            if sequence in seen:  
                dna_sequences.add(sequence)  
            seen.add(sequence)  
        return list(dna_sequences)