我有两个包含相同项目和不同订单的列表。 例如:
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]
算法顺序并不重要。
答案 0 :(得分:3)
我肯定会首先搜索最长的公共子序列(谷歌LCS,许多算法可用,例如在algorithmist上),然后如果从原始列表中删除LCS元素,则会得到最短的列表要删除的元素。在伪代码中:
lcs = LCS(a,b)
res = copy(a)
foreach element e in lcs
remove(res,e)
return res