我试图想一想这两个问题之间有什么区别
给定序列S
1)找出S的最长回文子序列。
2)找到S的最长子序列,其反向也是S的子序列。两个子序列可以相同。
原始措辞是:找到S的最长子序列S',使得有一个与S'相同的子序列和与S'相反的子序列。
我为这两个问题得出的DP配方是相同的。
他们实际上是同样的问题吗?我一直在试着这样思考:
假设最长的回文子序列为longestP
,那么longestP
本身显然是2)的可能答案。
2)可以有更长的答案吗?假设有一个名为longerP
,则longerP
的反向也是S的子序列,称之为reverseLongerP
。是否重叠,可以从longerP
和reverseLongerP
构建更长的回文结构。因此,与longestP
是最长的回文的假设相矛盾。
2)的答案是否会更短?我不这么认为,因为2)要求我们找到这种最长的子序列,而longestP
已经是一个可能的答案,任何短于longestP
的子序列都不应该被考虑。
以上是我对这个问题的思考,我错过了什么?
我的结论是,他们是同样的问题。然而,我被要求给出一个序列,其中包含一个不是回文序列的字符串s及其相反的序列,而这个序列没有比s长的回文。我不认为这是可能的。
我的想法是,假设存在这样的序列,则s和它的反向可以形成长度为length_of_s + length_of_reverse_s - length_of_overlap
的回文,因此该回文的最小长度为length_of_s
。但在这种情况下,length_of_overlap
等于length_of_s
,因此s和它的反向必须相同,s必须是回文,这将违反s不能成为回文限制。
答案 0 :(得分:0)
好吧,我到了错误的地方。它不能保证s和reverse_of_s可以形成回文。很容易看到这一点,但我一直陷入错误的假设之中。
4 3 1 2 3 4 2 1
就是一个很好的例子。