【问题标题】:Handling wildcard '*' operator in string matching using KMP-Algorithm?使用 KMP 算法在字符串匹配中处理通配符“*”运算符?
【发布时间】:2017-02-10 13:06:56
【问题描述】:

当要匹配的模式中包含通配符*,比如AB*C,出现的是文本ABEFGCS的情况应该如何处理(这里*消耗字符EFG ) 使用 KMP 算法?

算法中的哪些修改可以解决这个问题?

【问题讨论】:

  • * 本质上是贪婪的。我只会在文本中匹配 AB,然后在 AB 之后匹配 C。

标签: algorithm string-matching knuth-morris-pratt


【解决方案1】:

其实我明白了,留个答案供参考,我们可以简单地把通配符的字符串打断,对每个部分应用KMP,并检查每个部分是否是子字符串,以及部分是否连续与否可以在线性时间内检查,因此整体时间复杂度仍然是线性的。

【讨论】:

  • 当有k星号时我的时间复杂度分析:将pattern字符串分解为最多k+1部分,搜索target text中的每个子模式得到k+1排序索引。在合并排序中创建k 单调指针,这可以在O(km+n) 和空间O(k+n) 的时间找到所有匹配项(例如在python 中组合nextyield)。其中mtext 字符串的长度,n 是pattern 字符串的长度。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-16
  • 1970-01-01
  • 1970-01-01
  • 2014-05-02
  • 2011-01-13
  • 2013-12-24
  • 1970-01-01
相关资源
最近更新 更多