【问题标题】:Longest Common Substring without Dynamic programming or Suffix Tree没有动态编程或后缀树的最长公共子串
【发布时间】:2017-12-22 23:58:20
【问题描述】:

Skiena 的算法设计手册问题 8-3 的 b 部分要求提供一个“更简单”的 BigO(nm) 算法,用于查找不依赖于动态规划的最长公共子串。显而易见的答案似乎是使用后缀树,但是,Skiena 使用“更简单”这个词简单的。所以,我想知道,有没有另一种方法可以在 O(nm) 时间内解决这个问题?

【问题讨论】:

    标签: c++ algorithm longest-substring


    【解决方案1】:

    假设我们在第一个(较短的)字符串s 中固定了起始位置i。现在让我们在较长的字符串中找到其最长的前缀。它可以在O(n + m) 中通过检查字符串s[i:] + # + tprefix function(或z function)来完成,其中# 是st 中不存在的特殊符号。

    总体复杂度为O(n(n + m)),如果n ,则为O(nm)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-27
      • 2014-10-13
      • 2014-04-14
      相关资源
      最近更新 更多