没有动态编程或后缀树的最长公共子串

时间:2017-12-22 23:58:21

标签: c++ algorithm longest-substring

Skiena的算法设计手册问题8-3 b部分要求给出一个更简单的" BigO(nm)算法,用于查找不依赖于动态编程的最长公共子串。显而易见的答案似乎是使用后缀树,但是,Skiena使用了单词" Simpler"我不确定后缀树比DP更简单,也许搜索更简单,但是以nm时间复杂度构建后缀树并不简单。所以,我想知道,是否有另一种方法可以在O(nm)时间内解决这个问题?

1 个答案:

答案 0 :(得分:1)

我们说我们在第一个(较短的)字符串i中修复了起始位置s。现在让我们在较长的字符串中找到最长的前缀。可以通过检查字符串O(n + m)的{​​{3}}(或prefix function)在s[i:] + # + t中完成,其中#是{{1}中不存在的特殊符号}和s

总体复杂度为t,如果n <1,则为O(n(n + m))。米