我在Java中有一个有序列表A
和一个字符串集B
。我需要比较输出为二进制数组的形式。例如,如果A
为{a,b,c,d,e}
且B
为{a,d,e}
,则我的输出应为数组[1,0,0,1,1]
。如何在不诉诸暴力检查的情况下有效地实现这一目标?我正在处理相当多的集合(大小也是如此)以与A进行比较。
答案 0 :(得分:3)
这些集是什么类型的?通常情况下,集合没有任何订单。
基本上我们需要将B
视为一个集合,而将A
视为列表。例如,您可以使用:
List<String> a = ...;
Set<String> b = ...;
boolean result = new boolean[a.size()];
for (int i = 0; i < result.length; i++) {
result[i] = b.contains(a);
}
只要设置实现很快(例如HashSet
或LinkedHashSet
),这应该是O(n)操作,其中n是a
的大小。鉴于您需要产生n个结果,很难看出如何做得更好......
答案 1 :(得分:0)
不幸的是,你必须蛮力,但它是非常微不足道的......
类似的东西:
String a = "abcde";
String b = "ade";
BitSet setBits = new BitSet();
// Now iterate over
for(int i =0; i < a.length(); ++i)
{
setBits.set(i, b.indexOf(a.charAt(i)) != -1);
}
调整以回答将第二个字符串视为“集合”的情况。