想象一下,我们有两个列表,并且想知道另一个列表中元素的位置。为了说明:将列表中的元素映射到另一个列表中的位置
List<String> one = Arrays.asList("B", "I", "G");
List<String> another = Arrays.asList("L", "A", "R", "G", "E");
结果将是:
[-1, -1, 3]
因为既不B或我发生在第二列表中,但G中对第三位置。
这是我想出了迄今:
<E> List<Integer> indices(List<E> elements, List<E> container) {
List<Integer> indices = new ArrayList<>(elements.size());
for (int i = 0; i < elements.size(); i++) {
indices.add(container.indexOf(indices.get(i)));
}
return indices;
}
是否有避免List.indexOf()
内部回路更快的解决方案吗?
@Sneaky我很肯定的是一个动态编程方法可以从n * m个改进它与结合的可能接近n + m个,通过预处理每个阵列中序列和合并两个成公共数据结构可以检查重叠。 – chrylis