这是一个提供模式匹配问题解决方案的函数:
import itertools
def pattern_match(pattern, sequence):
"""Count the number of times that pattern occurs in the sequence."""
pattern = tuple(pattern)
k = len(pattern)
# create k iterators for the sequence
i = itertools.tee(sequence, k)
# advance the iterators
for j in range(k):
for _ in range(j):
next(i[j])
count = 0
for q in zip(*i):
if pattern == q:
count += 1
return count
要解决所述问题,请致电:
p = [4, 5, 6]
l = [1, 2, 3, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6]
count = pattern_match(p, l)
这是一个完整的要点解决示例问题的代码 https://gist.github.com/jcbsv/f92b9e68c1d5f426b7d8.
(我相信正确的答案是该模式重复 4 次,而不是问题中所述的 3 次。)
我不确定这个算法的复杂度实际上是否小于 O(n^2)。