如何在Java中计算和打印字符串数组中的重复字符串?

时间:2012-06-14 19:53:36

标签: java

我手上的困境。经过多次试验和错误,我仍然无法弄清楚这个简单的任务。

我有一个数组

String [] array = {anps, anps, anps, bbo, ehllo};

我需要能够遍历数组并找到重复项并在同一行上打印它们。没有重复的单词应该单独显示

输出必须像这样

anps anps anps
bbo
ehllo

我试过while,for循环,但逻辑似乎不可能。

7 个答案:

答案 0 :(得分:9)

好的,对于这个非常简单的迭代问题,使用HashMapHashSet的错误答案或答案数量令人担忧,所以这是一个正确的解决方案。

Arrays.sort(array);

for (int i = 0; i < array.length; ++i){
    if (i+1 == array.length) {
        System.out.println(array[i]);
    } else if (array[i].equals(array[i+1])) {
        System.out.print(array[i]+" ");
    } else {
        System.out.println(array[i]);
    }
}

答案 1 :(得分:2)

有多种方法可以实现这一目标。

  1. 使用两个for循环,一个遍历数组并选择一个值,另一个内循环通过数组(从当前索引)查找该值
  2. 您可以拥有一个包含单词的地图,循环遍历数组,然后使用与当前从数组中提取的值对应的出现次数填写地图
  3. 第二种方式更好。代码类似于:

    Map<String, Integer> occurences = new HashMap<String, Integer>();
    for(int index=0; index < array.length; index++){
           int nOcc = 1;
           if(occurences.containsKey(array[index]){
             nOcc = occurences.get(array[index]) + 1;
           }
           occurences.remove(array[index]);
           occurences.put(array[index], nOcc);
    }
    

    此时,地图应包含所有单词(键)及其对应的出现次数(值)

答案 2 :(得分:2)

先排序数组,然后

for(int i = 0, i < array.length; i++){
    String temp = array[i];
    System.out.print(temp+" ");
    for(int j = i+1; j < array.length; j++){
        String temp2 = array[j];
        if(temp.compareTo(temp2) == 0){
            System.out.print(temp2+" ");
            i++;
        }
    }
    System.out.println();
}

或类似的......

答案 3 :(得分:1)

如果您先对数组进行排序,那么您可以检查当前索引是否等于下一个索引(请记住您必须考虑IndexOutOfBounds),如果它们相等则执行{{1如果它们不相等,请执行System.out.print()

System.Out.println()

答案 4 :(得分:0)

复杂性n^2,从第一个值开始并一直找到相同的结果,如果您在一行中找到打印并转到新行,也应该删除所有打印值。

复杂性nlogn + n == nlognmergequick排序,然后执行结束并按顺序排序值。 有更多的解决方案,但我认为它足够你。

答案 5 :(得分:0)

朴素算法

  • 创建地图
  • 遍历所有数组
  • 检查地图中是否已存在密钥
  • 如果是,则更新值+1
  • 如果没有插入
  • 根据需要打印地图

你应该能够做你想要的事情!

答案 6 :(得分:0)

使用以下逻辑

import java.util.ArrayList;


public class RepeatStringPrint {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        try {
            String[] x = { "anps", "anps", "anps", "bbo", "ehllo" };
            String total[] = new String[50];
            String sTotal[] = null;
            for (int i = 0; i < x.length; i++) {
                total[i] = x[i];
            }
            for (int k = 0; k < total.length; k++) {
                int count = 0;
                if (total[k] != null) {
                    sTotal = new String[50];
                    for (int i = 0; i < total.length; i++) {
                        if (total[k] == total[i]) {
                            count++;
                            if (count <= 1) {
                                sTotal[i] = total[k];
                            }
                        }
                    }
                    if (sTotal[k] != null) {
                        for(int j=0; j<count; j++){
                            System.out.print(sTotal[k]+"\t");
                        }
                        System.out.print("\n");
                    }
                }

            }
        }
        catch (Exception e) {

        }
    }

}