我发现,为了在字符串中甚至在两个字符串之间找到重复的字符模式,建议使用后缀树。我想做的事情有点不同。
我有一个在列表中排序的字符串列表(我的意思是,第二个字符串严格地排在第一个字符串之后,第三个字符串在第二个字符串之后,等等)。我想在整组字符串中找到长度3-7的重复字符串集。对于这个问题,选择的数据结构和算法是什么?
字符串的计数至少为15K (假设最多为30K)。每个字符串的长度约为3-35个字符.
我想要第一个重复子数组中的字符串,以及整个列表中关于子数组重复次数的信息(但是我不需要重复的位置)。
例如:"a“、"b”、"c“、"g”、"h“、"t”、"i“、"a”、"b“、"c”、"z“
在这里,我期待答案"a","b","c“,当我传递时,需要3的重复字符串。这个长度可能从3到7不等。
发布于 2015-05-09 19:32:47
这会找到第一个中继器,以及它发生的频率:
from collections import Counter
def repeater(strings, k):
ctr = Counter()
first = None
for i in range(len(strings) - k + 1):
seq = tuple(strings[i:i+k])
if seq in ctr and first is None:
first = seq
ctr[seq] += 1
return first, ctr.get(first)
seq, ctr = repeater(["a", "b", "c", "g", "h", "t", "i", "a", "b","c", "z", "g", "h", "t"], 3)
if ctr:
print(seq, 'occurred', ctr, 'times')指纹:
('a', 'b', 'c') occurred 2 times一种没有Counter的替代方案
def repeater(strings, k):
seen = set()
rep, ctr = None, None
for i in range(len(strings) - k + 1):
seq = tuple(strings[i:i+k])
if rep:
ctr += seq == rep
elif seq in seen:
rep, ctr = seq, 2
else:
seen.add(seq)
return rep, ctrhttps://stackoverflow.com/questions/30144020
复制相似问题