【发布时间】:2017-02-10 13:06:56
【问题描述】:
当要匹配的模式中包含通配符*,比如AB*C,出现的是文本ABEFGCS的情况应该如何处理(这里*消耗字符EFG ) 使用 KMP 算法?
算法中的哪些修改可以解决这个问题?
【问题讨论】:
-
*本质上是贪婪的。我只会在文本中匹配 AB,然后在 AB 之后匹配 C。
标签: algorithm string-matching knuth-morris-pratt
当要匹配的模式中包含通配符*,比如AB*C,出现的是文本ABEFGCS的情况应该如何处理(这里*消耗字符EFG ) 使用 KMP 算法?
算法中的哪些修改可以解决这个问题?
【问题讨论】:
* 本质上是贪婪的。我只会在文本中匹配 AB,然后在 AB 之后匹配 C。
标签: algorithm string-matching knuth-morris-pratt
其实我明白了,留个答案供参考,我们可以简单地把通配符的字符串打断,对每个部分应用KMP,并检查每个部分是否是子字符串,以及部分是否连续与否可以在线性时间内检查,因此整体时间复杂度仍然是线性的。
【讨论】:
k星号时我的时间复杂度分析:将pattern字符串分解为最多k+1部分,搜索target text中的每个子模式得到k+1排序索引。在合并排序中创建k 单调指针,这可以在O(km+n) 和空间O(k+n) 的时间找到所有匹配项(例如在python 中组合next 和yield)。其中m 是text 字符串的长度,n 是pattern 字符串的长度。