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