【发布时间】:2017-10-18 06:28:41
【问题描述】:
我已阅读 LCS 问题的解决方案。但是现在有一个最长相似子序列问题:序列C是两个序列A,B的相似子序列当且仅当C是A的子序列并且我们最多可以替换C中的K个元素使得C是B的子序列.
例如,如果A = "ABCDE", B = "BCAFE", K = 1,那么最长相似子序列是"BCDE"("BCDE是"ABCDE"的子序列,我们可以替换'D'使用 'A' 或 'F' 使其成为“BCAFE”的子序列)。
我的问题是我只是想出了一个递归的方法来解决它,但是显然这很耗时,所以我想用 DP 代替。知道如何使用 DP 来解决这个问题吗?
我的递归方法是这样的:
LSS(i, j, k)
if(i == 0 or j == 0)
return 0
if(A[i] == B[j])
return LSS(i-1, j-1, k) + 1
if(k > 0)
return max(LSS(i-1, j-1, k-1) + 1, LSS(i-1, j, k), LSS(i, j-1, k))
else
return max(LSS(i-1, j, k), LSS(i, j-1, k))
【问题讨论】:
标签: algorithm dynamic-programming lcs