我的问题是,这个问题有没有更好的解决办法?多谢.
您可以通过从最长的子序列开始优化它,如果没有找到长长度的有效子序列,则检查字母较少的子序列。
例如,首先检查选择所有字母是否是有效的子序列。如果没有,那么您将测试是否有一个长度为n-1的子序列是有效的,等等。在每个阶段,如果得到isValid=true,您可以简单地返回找到的子序列,因为它promise是最长的有效子序列(因为较长的子序列已经被取消了资格)。
为了找到长度为m
这里,在这段代码中,它打印序列的最大子序列的长度,该序列先增加后减少,或者反之亦然。 例如: 输入:1,11,2,10,4,5,2,1 如增-减-增或减-增-减 示例: 投入:7 16 1 6 20 17 7 18 25 1 25 21 11 5 29 11 3 3 26 19
在最多一个序列存在重复的情况下,可以将最长公共子序列问题转化为最长递增子序列问题。减少问题的过程说明在这里: 假设您有以下序列: 然后,创建一个整数序列S3,其中您必须将S2的每个元素的位置放在S1中(如果元素在S1中不存在,那么忽略那个元素)。在本例中: 这种方法是如何工作的?为什么这种约简解决了寻找最长公共子序列的问题?
然而,我意识到我真正想解决的问题有点不同。给定一个固定的k,我需要确保公共子序列只涉及长度正好为k的子串。例如,设置k=2,并让这两个字符串为 我需要的子序列是“。 是否可以修改动态规划解来解决这个问题?
我在阅读了允许K个异常的最长递增子序列后创建了这个线程。我意识到提问的人并没有真正理解这个问题,因为他指的是一个链接,该链接解决了“允许一次更改的最长递增子数组”问题。所以他得到的答案实际上与李的问题无关。 假设给定一个长度为N的数组A。查找允许K个异常的最长递增子序列。 示例:N=9,K=1 A=[3,9,4,5,8,6,1,3,7] 答案:7 说明: 最长递增子序列为:3,4,5,8(或6),
longestCommonSubsequence正在返回LCS的长度。代码运行良好。但我试图打印子序列的值。例如,它应该打印“acef”。但我的代码只打印“ae”<如何修复? 这是完整的代码https://pastebin.com/Sq4QMtxF
我想出了一个蛮力算法来寻找两个给定字符串之间最长的公共子序列。它看起来时间复杂度为O(n^3)。它通过了我所有的测试用例,但我仍然不确定它是否会通过所有的测试用例......请让我知道这是正确的蛮力算法? 如果上面的代码不对,我要蛮力算法返回最长的公共子序列字符串,,我怎么才能做到这一点???