欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

LeetCode刷题之187.重复的DNA序列

程序员文章站 2022-07-12 08:55:56
...

LeetCode刷题之187.重复的DNA序列

我不知道将去向何方,但我已在路上!
时光匆匆,虽未曾谋面,却相遇于斯,实在是莫大的缘分,感谢您的到访 !
  • 题目
    所有 DNA 由一系列缩写为 A,C,G 和 T 的核苷酸组成,例如:“ACGAATTCCG”。在研究 DNA 时,识别 DNA 中的重复序列有时会对研究非常有帮助。
    编写一个函数来查找 DNA 分子中所有出现超过一次的10个字母长的序列(子串)。

  • 示例

输入: s = "AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT"
输出: ["AAAAACCCCC", "CCCCCAAAAA"]
  • 代码:
class Solution:
    def findRepeatedDnaSequences(self, s: str) -> List[str]:
        a = set()
        b = set()
        for i in range(len(s) - 9):
            temp = s[i:i+10]
            if temp not in a:
                a.add(temp)
            elif temp not in b:
                b.add(temp)
        return(list(b))
# 执行用时 :88 ms, 在所有 Python3 提交中击败了88.70%的用户
# 内存消耗 :25.8 MB, 在所有 Python3 提交中击败了62.50%的用户
  • 算法说明:
    建立两个空的集合,将字符串按照10个字符进行切片成temp,判断temp是否存在于a中,如果不存在,说明temp只出现过一次,则存储在a中;如果存在于a中,说明出现过不止一次,应该是重复的片段,将其存储在b中,但是为了避免重复,在存储的时候判断是否在b中存在,不存在则将其存入b中;将b转换为列表形式输出即可。