假设我有一个模式p和一些文本t,我想找到与t的子串相匹配的p的最大前缀。是否可以修改kmp算法来执行这样的操作?(如果我没记错的话,kmp算法会进行部分匹配,但我对可能最长的匹配感兴趣)。

最佳答案

当KMP扫描文本时,KMP的状态显示了与当前文本匹配的模式的最长前缀的长度,因此您可以记录所看到的最大长度和所看到的模式中的点,并且看起来您可以使用这个来找到P的最长匹配前缀。
另一种方法是将p的所有前缀放入aho corasick。运行时的行为会非常相似,尽管它会消耗更多的存储空间。它允许您使用现有的库——如果您有一个用于Aho Corasick的库,而不是修改KMP实现。

10-04 19:00