比较java中的两个字符串集和输出二进制(匹配/不)数组

时间:2012-03-02 08:33:21

标签: java set

我在Java中有一个有序列表A和一个字符串集B。我需要比较输出为二进制数组的形式。例如,如果A{a,b,c,d,e}B{a,d,e},则我的输出应为数组[1,0,0,1,1]。如何在不诉诸暴力检查的情况下有效地实现这一目标?我正在处理相当多的集合(大小也是如此)以与A进行比较。

2 个答案:

答案 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);
}

只要设置实现很快(例如HashSetLinkedHashSet),这应该是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);
}

调整以回答将第二个字符串视为“集合”的情况。