• leetcode ——187. 重复的DNA序列


    虽然做出来了,但是超出时间限制了,就不知道该怎么改进。

    超出时间限制如下:

    class Solution:
        def findRepeatedDnaSequences(self, s: str) :
            if len(s) <= 10 :
                return []
            res = []
            i = 0
            while i < len(s)-10:
                #print(s.count(s[i:i+1]))
                if s[i+1:].count(s[i:i+10]) > 0:
                    if s[i:i+10] not in res:
                        res.append(s[i:i+10])
                        i += 1
                    else:
                        i += 1
                else:
                    i += 1
            return res

    看了别人的答案做法,,,

    解法一:布尔字典:

    class Solution:
        def findRepeatedDnaSequences(self, s: str) -> List[str]:
            d = {}
            for i in range(len(s) - 9):
                if s[i: i + 10] in d:
                    d[s[i: i + 10]] = True
                else:
                    d[s[i: i + 10]] = False
            return [i for i in d if d[i]]
    执行用时 :84 ms, 在所有 python3 提交中击败了80.22%的用户
    内存消耗 :27.6 MB, 在所有 python3 提交中击败了6.25%的用户

    好巧妙啊!!!!!!!

    鼓掌!!!!!!!!!!

    解法二:计数字典

    class Solution:
        def findRepeatedDnaSequences(self, s: str) -> List[str]:
            d = collections.Counter(s[i: i + 10] for i in range(len(s) - 9))
            return filter(lambda i: d[i] > 1, d)
    执行用时 :92 ms, 在所有 python3 提交中击败了64.56%的用户
    内存消耗 :27.9 MB, 在所有 python3 提交中击败了6.25%的用户
     
    关于Counter()的介绍:
    collections 包下的 Counter 也是一个很有用的工具类,它可以自动统计容器中各元素出现的次数。

    Counter 的本质就是一个特殊的 dict只不过它的 key 都是其所包含的元素而它的 value 则记录了该 key 出现的次数。因此,如果通过 Counter 并不存在的 key 访问 value,将会输出 0(代表该 key 出现了 0 次)。

    程序可通过任何可法代对象参数来创建 Counter 对象,此时 Counter 将会自动统计各元素出现的次数,并以元素为 key,出现的次数为 value 来构建 Counter 对象;程序也能以 dict 为参数来构建 Counter 对象;还能通过关键字参数来构建 Counter 对象。例如如下程序:

    解法三:整型字典

    class Solution:
        def findRepeatedDnaSequences(self, s: str) -> List[str]:
            d = collections.defaultdict(int)
            for i in range(len(s) - 9):
                d[s[i: i + 10]] += 1
            return [i for i in d if d[i] > 1]
    执行用时 :92 ms, 在所有 python3 提交中击败了64.56%的用户
    内存消耗 :27.9 MB, 在所有 python3 提交中击败了6.25%的用户
     
    方法四:两个集合,滑动窗口
    class Solution:
        def findRepeatedDnaSequences(self, s: str) -> List[str]:
            tmp, ans = set(), set()
            for i in range(len(s) - 9):
                if s[i: i + 10] not in tmp:
                    tmp.add(s[i: i + 10])
                elif s[i:i + 10] not in ans:
                    ans.add(s[i: i + 10])
            return list(ans)
    执行用时 :92 ms, 在所有 python3 提交中击败了64.56%的用户
    内存消耗 :27.9 MB, 在所有 python3 提交中击败了6.25%的用户
     
    我还差得太远了!!!!继续加油啊!!!!!!
                 
                                                                                  ——2019.10.21
     
    我的前方是万里征途,星辰大海!!
  • 相关阅读:
    Linux下修改Mysql的用户(root)的密码
    Mysql 用户权限管理
    mysql的四种启动方式
    MySQL慢日志的相关参数
    mysqlsla slow-query常用用法

    导包和模块注意的问题
    Python面向对象之魔法方法/双下方法
    __new__问题
    转:Python常见字符编码及其之间的转换
  • 原文地址:https://www.cnblogs.com/taoyuxin/p/11714734.html
Copyright © 2020-2023  润新知