![]() |
1
3
理论上讲,你想做的事情是正确的 Aho--Corasick . 实现后缀链接有点复杂,所以这里有一个只使用trie的算法。 我们一个字母一个字母地消耗文本。在任何时候,我们都会在trie中维护一组可以遍历的节点。最初,这个集合只包含根节点。对于每个字母,我们循环遍历集合中的节点,如果可能,通过新字母降序。如果结果节点是匹配的,很好,请报告它。不管怎样,把它放在下一组。下一个集合还包含根节点,因为我们可以随时开始新的匹配。 下面是我在python中快速实现的尝试(未经测试,没有保修等)。
|
![]() |
2
0
如果您的目标是获得一个依赖于文本窗口的更快的代码,那么您可以使用设置查找来加快速度。如果可行,将查找列表改为集合,然后在文本中查找用于查找的所有可能窗口。
|
![]() |
3
0
嗯,这个怎么样?简单易懂:d
|
![]() |
4
0
扩展@david eisenstat建议,使用aho corasick的算法来实现这一点。我找到了一个简单的python模块( pyahocorasic )可以做到这一点。 对于问题中给出的示例,下面是代码的外观。
|