【发布时间】:2016-03-14 19:13:25
【问题描述】:
我正在尝试查找在 ArrayList 中仅出现一次的字符串数。
我实现了多少(最好具有最佳的时间复杂度)?
下面是我的方法:
public static int countNonRepeats(WordStream words) {
ArrayList<String> list = new ArrayList<String>();
for (String i : words) {
list.add(i);
}
Collections.sort(list);
for (int i = 1; i < list.size(); i++) {
if (list.get(i).equals(list.get(i - 1))) {
list.remove(list.get(i));
list.remove(list.get(i - 1));
}
}
System.out.println(list);
return list.size();
}
为什么不删除list.get(i) 和list.get(i-1) 的字符串?
【问题讨论】:
-
@FedericoPeraltaSchaffner 你有什么想法吗? :)
-
上述方法会出现并发修改异常。
-
@RahulSharma 不完全是,迭代器抛出并发修改异常,它主要是通过 for-each 创建的,而不是简单的
for(i..)。但是我们可能会因为错误的索引而冒着出错的风险。 -
抱歉,没有。但我试图运行代码,它就像一个魅力。 @Iona 你有什么错误吗?
-
如果使用
Collections.sort,则时间复杂度为O(n log n),但使用HashSets(但不排序)可以轻松找到在O(n)时间中恰好出现一次的字符串数.
标签: java string arraylist unique non-repetitive