python - 从两个列表中删除最少的项目以使列表相同

标签 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]

算法的顺序并不重要。

最佳答案

我当然会首先搜索最长的公共(public)子序列(google LCS,许多算法可用,例如 algorithmist ),然后如果您从原始列表之一中删除 LCS 元素,您将获得最短的元素列表消除。在伪代码中:

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

关于python - 从两个列表中删除最少的项目以使列表相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12446889/

相关文章:

python - 将多个面板上的绘图标签安排在 matplotlib 中的一行中

python - 我的 numpy 数组更紧凑的 __repr__?

java - 在图中查找彼此之间具有最大传播/距离的 N 个节点

python - 是否有更多方法来定义只有一项的元组?

python - 用sql和python自处理页面

python - 神经网络输入/输出

arrays - 未排序的移位数组的位移

algorithm - Dijkstra 算法在排序列表/数组实现的优先级队列上的运行时间

c - 用 '%20' 替换字符串中的所有空格。假设字符串在字符串末尾有足够的空间来容纳额外的字符

algorithm - 最佳 A* 启发式 : multiple targets and agents