如何在字符串数组中查找所有非重复项?

时间:2016-09-27 17:42:06

标签: java

我想在字符串数组中找到所有非重复项 假设我:

String[] str = {"Red", "Red", "Green", "Green", "Blue"};

我想找到“Blue”,因为它不再重复。

我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:2)

其中一个解决方案是使用String创建Map作为键,使用Integer作为值。您将不得不遍历数组并增加地图中String的数量。

String[] str = {"Red", "Red", "Green", "Green", "Blue"};
Map<String,Integer> stringsCount = new HashMap<String,Integer>();

for (String s : str){
    if (!stringsCount.containsKey(s))
        stringsCount.put(s, 1);
    else
        stringsCount.put(s, stringsCount.get(s) + 1);
    }

然后你可以打印每次只计算一次的字符串:

for (Map.Entry<String, Integer> entry : stringsCount.entrySet())
    if (entry.getValue() == 1)
        System.out.println(entry.getKey());

答案 1 :(得分:0)

你可以:

  • 对数组进行排序
  • 创建一个空列表
  • 遍历排序的数组:if element == previous element,然后不执行任何其他操作将前一个元素添加到列表

在迭代结束时,列表将仅包含唯一元素。

请注意,这(显然)不会保留原始订单。

答案 2 :(得分:0)

您可以使用HashSet。例如,这应该有效:

Set<String> getUniqueWords(String[] words) {
    Set<String> uniqueWords = new HashSet<>();
    Set<String> foundWords = new HashSet<>();

    for (String word : words) {
        if (foundWords.contains(word)) { //O(1)
            uniqueWords.remove(word);    //O(1)
        } else {
            uniqueWords.add(word);       //O(1)
        }
        foundWords.add(word);            //O(1)
    }

    return uniqueWords;
}

因此,使用这种方法,您将(理论上)具有线性时间复杂度,因为您通过数组在单个循环中获得了唯一的单词。