优化一些Python代码

时间:2018-02-17 14:25:23

标签: python string optimization

处理以下问题:

  

给定整数L和t,如果存在p的长度L间隔,其中p出现至少t次,则长度为k的字符串p在(较大的)字符串s内形成(L,t) - 团块。 p的外观允许在间隔中重叠。

我提出了以下解决方案:

from collections import Counter

def clumpFinding(s, k, L, t):
    c = Counter()
    res = set()
    for e in range(k, len(s)+1):
        b = e-L-1
        if b > -1:
            c[s[b:b+k]] -= 1
        tmp = s[e-k:e]
        c[tmp] += 1
        if c[tmp] >= t:
            res.add(tmp)
    return res

简短说明:说S = "0123456789", L=4, t = 3, c = {}, k = 2

在开始时我们会在此之后将“01”,“12”,“23”添加到计数器 我们在添加新元素之前删除最旧的元素:

c:{01} | "123456789" -> c{01,12} | "23456789" -> ... 
-> "01" | c{12,23,34} | "456789" ->  "012" | c{23,34,45} | "56789"

每次将一个字符串添加到计数器时,我们检查计数是否大于或等于t,如果是,我们将其添加到结果集

我想让这段代码运行得更快,但我不确定我应该/可以优化哪些部分。

0 个答案:

没有答案