从两个列表中删除最小项目以使列表相同

时间:2012-09-16 12:32:38

标签: python algorithm

我有两个包含相同项目和不同订单的列表。 例如:

a = [4, 2, 3, 1]
b = [2, 3, 1, 4]

我应删除哪些项目以使列表相同? 在这里:[4]是一个答案,所以:

a = [2, 3, 1]
b = [2, 3, 1]

如果我删除[2, 4][2, 3, 1][2, 3, 1]也是答案:

a = [4]
b = [4]

我需要删除最少数量的元素,此处[4]是最佳解决方案。

另一个例子:

a = [1, 2, 3, 4]
b = [2, 1, 4, 3]

可能的答案:

[1, 3]
[1, 4]
[2, 3]
[2, 4]

算法顺序并不重要。

1 个答案:

答案 0 :(得分:3)

我肯定会首先搜索最长的公共子序列(谷歌LCS,许多算法可用,例如在algorithmist上),然后如果从原始列表中删除LCS元素,则会得到最短的列表要删除的元素。在伪代码中:

lcs = LCS(a,b)
res = copy(a)
foreach element e in lcs
  remove(res,e)
return res