0

我只是想获得有关删除重复项的帮助。到目前为止,我有这个,但它不会删除或删除多次出现的单词。

 void antUnikOrd() {
int unikCount = 0;
String c = "ahfuwa";
for(int i = 0; i<a.length;i++) {


    for(int j= 0;j<a.length;j++) {  
    if(a[i].equals(a[j])) {         
        unikCount++;
    }
    if(unikCount>1) {
        a[j] = c;
        unikCount = 1;

    }       
      unikCount = 0;            
    }

    for( i = 0;i<a.length;i++) {
    //if(a[i] != " ") {
    System.out.println(a[i]);
    //  }
    }
}
4

5 回答 5

1

如果您不允许使用额外的内存,并且非常方便的 Java 集,那么有一个即时算法可以执行您想要的操作,即 O(NlogN) 而不是您提出的明显的 O(N^2) 解决方案。

1 - Sort the array of words (Arrays.sort(~) will do the trick in O(nlogn)).
2 - For each word in the sorted array look if the next one is equal. (one loop)
    a - TRUE = set to delete current word from array (not the next one, keep that one)
    b - FALSE = go on to next
3 - Write to file by ignoring the detect duplicates. (one more loop)

解释第 2 点:

array = [ a, b, b, c, d, d, d ]
ITERATIONS
- a != b ->  [ a, b, b, c, d, d, d ] index = 0
- b == b ->  [ a, X, b, c, d, d, d ] index = 1
- ...
- d == d ->  [ a, X, b, c, X, d, d ] index = 4
- d == d ->  [ a, X, b, c, X, X, d ] index = 5
- d is last so we stop

现在我们过滤 Xs:

[a, b, c, d]

这实际上是 O(nlogn + 2n),可以简化为 O(nlogn)。

祝你好运,但它应该相当简单。如果您不能使用 Arrays.sort(~) 实现自己的排序功能,我建议使用 QuickSort 或 MergeSort,因为它们决定了该解决方案的整体性能。

于 2013-10-04T15:03:44.813 回答
0

这个问题有点不清楚,但我假设您希望读取文件的内容,删除重复项并将其写回文件。

一旦您获得了文件的内容(请参阅此问题以获取指导:Reading a plain text file in Java),那么从 List 中删除重复项的最简单方法是将它们放入 Set 中:

List<String> lines = readFromFile(); // complete this method
Set<String> uniqueLines = new HashSet<String>(lines);

一旦你有一组独特的行,你可以简单地将它们写回文件(请参阅这个问题以获取指导:如何创建文件并用 Java 写入文件?

于 2013-10-04T15:02:18.023 回答
0

当您替换文件中的文本时,我经常将整个文件读入内存,做任何我想做的操作,然后将其全部写回文件。我不喜欢分发答案,所以我会给你类似的东西。例如在伪代码中:

public void removeWord(String word)
{
    fileReader := FileReader(the file to read)
    lines := Java HashSet object
    for every line in the file {
        // Cycle through each line and load into the HashSet
        lines.add(current line)
    }

    // You now have a whole bunch of different lines.

    fileReader.close();
    // Unlock the file.

    fileWriter := FileWriter(the file to write in overwrite mode)

    for every line in lines
    {
         fileWriter.write(line)
    }
    fileWriter.flush() // To be safe..
    fileWriter.close() // to prevent memory leaks.

}
于 2013-10-04T14:40:14.350 回答
0

您可以将元素存储到自动删除重复的 HashSet 中

于 2013-10-04T14:35:24.517 回答
0

您可以将字符串添加到 HashSet 中,它会删除重复项。

于 2013-10-04T14:36:25.680 回答