我手上的困境。经过多次试验和错误,我仍然无法弄清楚这个简单的任务。
我有一个数组
String [] array = {anps, anps, anps, bbo, ehllo};
我需要能够遍历数组并找到重复项并在同一行上打印它们。没有重复的单词应该单独显示
输出必须像这样
anps anps anps
bbo
ehllo
我试过while,for循环,但逻辑似乎不可能。
答案 0 :(得分:9)
好的,对于这个非常简单的迭代问题,使用HashMap
或HashSet
的错误答案或答案数量令人担忧,所以这是一个正确的解决方案。
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)
有多种方法可以实现这一目标。
第二种方式更好。代码类似于:
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
== nlogn
,merge
或quick
排序,然后执行结束并按顺序排序值。
有更多的解决方案,但我认为它足够你。
答案 5 :(得分:0)
朴素算法
你应该能够做你想要的事情!
答案 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) {
}
}
}