我写了一个循环遍历字符串数组的程序,打印出唯一的单词及其出现,然后将它们打印到文件中。这部分工作得很好,但我无法弄清楚如何获得独特单词的总数。我有一种感觉,我需要为计数器创建一个int数组,但我并不完全掌握如何做到这一点。不幸的是,我不允许使用Hashmap,Sets或Lists;必须坚持使用数组。
boolean [] done = new boolean[textfile.length];
for(int i = 0; i<textfile.length; i++){
if(done[i])
continue;
int nb = 0;
for(int j = i; j < textfile.length; j++){
if(done[j])
continue;
if(textfile[i].equals(textfile[j])){
done[j] = true;
nb++;
}
}
pw.println(textfile[i] + "occurs " + nb + " times");
}
答案 0 :(得分:1)
现在你要将每个单词与文件中的所有单词进行比较,这需要O(N^2)
次,你可以创建一个包含所有单词的数组,按字典顺序对其进行排序{{1时间,然后遍历数组并计算每个唯一单词的出现次数(如果2个相邻单词相等,则继续计数,否则打印并重置计数器),这需要O(NlogN)
次。
答案 1 :(得分:1)
我建议你这样做 -
- 添加数组中的所有值并对此数组进行排序。(这样可以很容易地获得唯一条目)
- 将排序数组的所有元素(逐个)与要比较的单词进行比较。
- 比较文本文件中的单词与数组中存在的单词时,保持一个全局变量i.e. counter
,该变量将在每次出现一个唯一字符时递增,并将保留该值以供将来使用。
答案 2 :(得分:0)
您可以在第一个之外设置uniqe_counter,并在每次打印前增加nb == 1
答案 3 :(得分:0)
您正在外循环的每次迭代中重新初始化变量nb
。因此,你最终会丢失在最后一次迭代中处理的唯一单词的数量。
你必须把int nb = 0;
放在第一个for循环旁边。
答案 4 :(得分:0)
最简单的方法是: