非正式问题陈述:
给定一个字符串(例如,我们希望将一些字母成红色,将一些字母成蓝色(有些根本不),这样,从左到右仅读取红色字母会产生与仅读取蓝色字母相同的结果。
在示例中,我们可以为它们着色:
因此,我们说是的重复子。它也是最长的重复子序列(易于检查)。A C C A B B A B
我们可以有效地计算最长的重复子序列吗?
正式问题:
确定字符串和某个是否难为NP,字符串中是否存在长度为的重复子序列?ķ
- 如果是这样:哪个问题可以减少到这个问题?
- 如果不是:什么是有效算法?(显然,此算法可用于计算最长的重复子序列)
奖励问题:
如果字母的大小受常数限制,它们将始终是长度为的重复子序列吗?
(这对于二进制字母来说是正确的。)
编辑2:对于奖金问题的否定答案,众所周知的是大小至少为字母。实际上,对于大小为Σ的字母,存在具有最长重复子序列且长度仅为O(n·Σ^ {-1/2})的字符串。随机字符串足以证明这一点。结果已经存在,但我忽略了它。
编辑: 注意:
有些人说“子序列”时,其意思是“子串”。我不。这不是找到子字符串两次的问题。