我需要知道是否在大海捞针中找到了/所有针头。我假设有一种方法可以优化搜索时间。例如:
haystack = "xxxxxefgyyy"
needles = [ 'ezz', 'efg', 'eee', 'b', ... ]
在此示例中,优化的方法可能会按首字母对针进行排序。在干草堆中匹配“ezz”之后,重新搜索干草堆是没有意义的。理想情况下,针对下一针(“egh”),将从'e'的最后位置搜索干草堆,而不是从头开始搜索('xxx ..')。
这种算法的名称是什么?
有什么python实现?
注释:
答案 0 :(得分:-1)
也许有更高效的实现,但你可以简单地使用re。对于一个非常大的needles
,这可能并不理想 - 不知道“真正大”的起点。
import re
haystack = "xxxxxefgyyy"
needles = [ 'ezz', 'efg', 'eee', 'b']
needles_re=re.compile("|".join(map(re.escape,needles)))
for m in needles_re.finditer(haystack):
print(m.group(0))