字符串数组 - 唯一值的实例

时间:2013-10-09 10:25:14

标签: java arrays counter

我写了一个循环遍历字符串数组的程序,打印出唯一的单词及其出现,然后将它们打印到文件中。这部分工作得很好,但我无法弄清楚如何获得独特单词的总数。我有一种感觉,我需要为计数器创建一个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");
}

5 个答案:

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

最简单的方法是:

  1. 对数组进行排序
  2. 通过已排序的数组并记住上一个唯一条目
  3. 如果lastUniqueEntry与下一个条目不同。 UniqueCount + 1
  4. 做其他所有事情,比如打印独特的单词及其出现次数