0

假设有两个列表

L1=[['A', ['C', ['B', ['D', 0]]]],
   [['A', ['D', ['K', ['C', ['E', 0]]]]],
   [['A', ['C', ['B', ['M', 0]]]]]

L2=[['A', ['C', ['B', ['K', 0]]]],
   [['A', ['C', ['B', ['B', ['E', 0]]]]],
   [['A', ['D', ['K', ['F', 0]]]]]

然后输出应该返回所有具有最长公共路径的子路径。例如:

由于'A'、'C'、'B'是共同的L1和L2;输出应该是:

[['A', ['C', ['B', ['D', 0]]]],
[['A', ['C', ['B', ['M', 0]]]],
[['A', ['C', ['B', ['K', 0]]]],
[['A', ['C', ['B', ['B', ['E', 0]]]]]

. 此外,“A”、“D”、“K”在 L1 和 L2 中也常见一次;输出应该是:

[['A', ['D', ['K', ['C', ['E', 0]]]]],
[['A', ['D', ['K', ['F', 0]]]]]

我试过了 :

[i for i in L1 if i in L2]

但它会给出所有公共路径的输出,直到叶子(结束)。

4

1 回答 1

0

从伟大而奇妙的 c 中获取一些东西!

您可以简单地在另一个中使用一段时间并逐个字母检查,如果一个不同,则退出第一个时间并将字符设置为 0

喜欢

while (var[i][n] && var2[i][n])
   while (var[i][n] == var2[i][n])
      n = n + 1
   var[i][n] = 0

或类似的东西。但它并没有真正优化。

于 2019-08-06T10:21:57.210 回答