如何提取两个有序列表的非交叉部分?

时间:2015-10-29 08:44:24

标签: java collections

我想加入两个字符串列表。两个列表都有固定的顺序。

问题:第二个列表部分包含第一个列表的“结束”。我永远不知道第一个列表末尾有多少项位于第二个列表的顶部。

示例:

第一个清单:

testa
testb
testc
testa
testd
testg

第二个清单:

testa //from 1st
testd //from 1st
testg //from 1st
textf
testc
testb
testa

在这里,您可以看到第一个列表中的第一个元素是“继续”。因此,我想从第二个列表中删除这3个项目,然后加入两个列表。

问题:如何调用此类操作?可能有像apache-commons CollectionUtils这样的框架可以执行那些操作吗?

1 个答案:

答案 0 :(得分:2)

我不知道它是如何被调用的(尽管它看起来有点像Longest common subsequence problem,但有其他约束)并且我认为你不会找到内置方法。但你可以写下来:

    长度为list1n1长度为list2
  1. n2
  2. 从项目i=max(0, n1-n2)开始,然后检查list1(i) == list2(n1-i-1)
  3. 继续增加i,直至找到匹配项
  4. 比较子列表list1(i:n1)list2(0:n1-i-1) - 如果匹配则找到了您想要的内容,否则请返回3
  5. 这可能会更有效率。