没有动态编程或后缀树的最长公共子串
Posted
技术标签:
【中文标题】没有动态编程或后缀树的最长公共子串【英文标题】:Longest Common Substring without Dynamic programming or Suffix Tree 【发布时间】:2017-12-22 23:58:20 【问题描述】:Skiena 的算法设计手册问题 8-3 的 b 部分要求提供一个“更简单”的 BigO(nm) 算法,用于查找不依赖于动态规划的最长公共子串。显而易见的答案似乎是使用后缀树,但是,Skiena 使用“更简单”这个词简单的。所以,我想知道,有没有另一种方法可以在 O(nm) 时间内解决这个问题?
【问题讨论】:
【参考方案1】:假设我们在第一个(较短的)字符串s
中固定了起始位置i
。现在让我们在较长的字符串中找到其最长的前缀。它可以在O(n + m)
中通过检查字符串s[i:] + # + t
的prefix function(或z function)来完成,其中# 是s
和t
中不存在的特殊符号。
总体复杂度为O(n(n + m))
,如果n ,则为O(nm)
【讨论】:
以上是关于没有动态编程或后缀树的最长公共子串的主要内容,如果未能解决你的问题,请参考以下文章