algorithm - 后缀树(二进制字符串): Find longest substring

标签 algorithm

寻找一种有效的算法来找到字符串中最长的子字符串,该子字符串也具有其互补字符串(按位)。

这就是我所说的按位互补字符串的意思:

100011
011100

最佳答案

这是一个简单的 O(n) 算法,它依赖于后缀树构造。

将原串s和补串s'加载到同一个后缀树中(O(n)时间)。然后通过为每个节点 x 设置两个标志 f(x) 和 f'(x) 来对这棵树进行后处理,当 f(x)(resp. f'(x))包含后缀 s(resp。 s')。现在简单地遍历树寻找设置了两个标志的最深节点,并且您找到了 s 中最长的字符串,其补码也出现在 s 中。后处理也仅花费 O(n) 时间,因此总运行时间为 O(n)。

关于algorithm - 后缀树(二进制字符串): Find longest substring,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6409915/

相关文章:

java - 寻找配对方法的时间复杂度

algorithm - 旅行时间最小化算法

algorithm - 如何反转堆栈?

algorithm - 图中的最短路径

python - 剖析 Python 中的置换算法

c++顺时针排序二维点

algorithm - 图 DFS 检测周期 - (假设)反例

在数组中查找具有给定差异的 2 个项目的算法

algorithm - 从 O(n * log(log(n))) 中的最大堆构建排序列表?

c - C语言中的奇数?铅 'ram or algorithm' !