处理以下问题:
给定整数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,如果是,我们将其添加到结果集
我想让这段代码运行得更快,但我不确定我应该/可以优化哪些部分。