187. 重复的DNA序列

问题描述

https://leetcode.cn/problems/repeated-dna-sequences/description/

解题思路

这同样是一个滑动窗口的典型问题。

首先我们看一下数据规模,进行一下异常处理。

我们设置一个res用来存储最后的结果,一个se用来存储遍历过的字符串,方便判断是否重复,一个memed用来存储已经添加到res中的字符串,同样是用来减少判定是否已经加入到res中的时间。

然后我们开始遍历就完事了。如果它没有被遍历过,就加入到se中。如果它被遍历过,就判定一下它是否加入到过res中,如果没加入过,就加入,同时更新memed。

代码

class Solution:
    def findRepeatedDnaSequences(self, s: str):
        if len(s) <= 10:
            return []
        # 存储最后结果
        res = []
        # 存储遍历过的字符串
        se = set()
        # 存储res中的字符串(加速查找)
        memed = set()
        for i in range(9, len(s)):
            cur = s[i-9:i+1]
            if cur not in se:
                se.add(cur)
            elif cur not in memed:
                res.append(cur)
                memed.add(cur)
        return res

 代码二

class Solution:
    def findRepeatedDnaSequences(self, s: str) -> List[str]:
        res = set()
        if len(s) < 10:
            return []
        mem = set()
    # 之所以是9,是因为要启动range, 试想一下列表长度为10的场景。
        for i in range(len(s)-9):
            cur_st = s[i:i+10]
            if cur_st in mem:
                res.add(cur_st)
            else:
                mem.add(cur_st)
        return list(res)

 

posted @ 2023-01-15 13:06  BJFU-VTH  阅读(12)  评论(0编辑  收藏  举报