最长重复(不重叠)子序列

Dew*_*rdi 8 string algorithm subsequence

如何找到最长的重复(不重叠)子序列(不是子串)?

约束:

字符串 S 最多由 100.000 个小写字符“a”-“z”组成。

例子:

字符串hanadwomehanudsiome具有最长的重复(非重叠)子序列beautiful

预期时间复杂度为 O(|S| log |S|) 或更好(|S| 是字符串 S 的长度)。

mni*_*tic 2

用计算机科学语言定义的问题是找到输入字符串中至少出现两次且不重叠的最长公共分散子序列 (LCSS)。

\n

这是计算机科学中正在进行的研究问题,并且它是更一般的最长公共子序列问题的子问题。从 1977 年开始,人们就以某种形式提出了这个问题的解决方案(Hunt-Szymanski 算法))到现在

\n

关于该问题的最新出版物之一是Russo 和 Francisco 的“Small Longest Tandem Scatered Subsequences”。它声称该算法的时间复杂度为:

\n
O(min{n, \xe2\x84\x93}\xce\xbb(1 + log(min{\xce\xbb, \xe2\x84\x93/\xce\xbb})) + n\xce\xbb + \xe2\x84\x93)\n
Run Code Online (Sandbox Code Playgroud)\n

在哪里:

\n
    \n
  • n是输入字符串的大小
  • \n
  • \xce\xbb是最长公共分散子序列的大小
  • \n
  • \xe2\x84\x93是输入字符串中包含相同字母的位置对的数量
  • \n
\n

然而,对于受限的输入大小,时间复杂度会下降到O(1)评论中指出的那样。

\n