我手上有一个难题。经过多次试验和错误,我仍然无法弄清楚这个简单的任务。
我有一个数组
String [] array = {anps, anps, anps, bbo, ehllo};
我需要能够遍历数组并找到重复项并将它们打印在同一行上。没有重复的单词应该单独显示
输出需要是这样的
anps anps anps
bbo
ehllo
我试过while,for循环,但逻辑似乎是不可能的。
我手上有一个难题。经过多次试验和错误,我仍然无法弄清楚这个简单的任务。
我有一个数组
String [] array = {anps, anps, anps, bbo, ehllo};
我需要能够遍历数组并找到重复项并将它们打印在同一行上。没有重复的单词应该单独显示
输出需要是这样的
anps anps anps
bbo
ehllo
我试过while,for循环,但逻辑似乎是不可能的。
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]);
}
}
有多种方法可以实现这一目标。
第二种方式更好。代码类似于:
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);
}
此时,地图应包含所有单词(键)及其对应的出现次数(值)
先对数组排序,然后
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();
}
或类似的东西...
如果先对数组进行排序,则只需检查当前索引是否等于下一个索引(请记住,您必须考虑IndexOutOfBounds
),如果它们相等,则执行 a,System.out.print()
如果不相等,则执行 a System.Out.println()
。
String [] array = {"anps", "anps", "anps", "bbo", "ehllo"};
// If you already are assured that the strings in the array are sorted
// then the sort is not necessary.
Arrays.sort(array);
for(int i = 0; i < array.length; i++){
if((i+1)==array.length || !array[i].equals(array[(i+1)])){
System.out.println(array[i]);
} else {
System.out.print(array[i]+" ");
}
}
复杂性n^2
,从第一个值开始到最后找到相同的值,如果你在一行中找到打印并转到新行,你也应该删除所有打印的值。
复杂性nlogn + n
==或排序nlogn
,然后转到末尾并 pring 序列值。还有更多解决方案,但我认为对您来说已经足够了。merge
quick
朴素算法
你应该能够做你正在寻找的!
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) {
}
}
}