如何打印不重复的字符串?

时间:2014-02-13 06:59:45

标签: java arrays string

我尝试打印字符串没有重复,但我没有得到正确的输出,在这里我暴露了我的代码片段。

class Duplicatestring
{
public static void main(String [] args)
    {
    String word = "";
            String[]  ip ={"mani" ," manivannan","raghv ","mani"};  
    for(int i =0; i<ip.length; i++)
    {
        for(int j = i+1; j<=ip.length; j++)
        {
                if(ip[i].equals(ip[j])){ 
            word = word+ip[i];

        }
        }
        System.out.println(word);

    }       

    }
}

还有一件事是我不想使用集合这是我的任务,请求为此提供任何适当的解决方案。

示例:

Input -> {mani, manivanna,raghv, mani};
output -> {mani, manivanna,raghv}              

5 个答案:

答案 0 :(得分:1)

如果您不想使用集合,那么我认为这是一项功课,所以我不想为您提供完整的解决方案,但我会指导您。

您可以拥有一个原始数组大小的辅助数组。现在你编写两个嵌套循环,对于每个单词,如果找到重复,则用辅助数组标记为1.

在此过程之后,您将在辅助数组中得到类似的内容:

[0,0,0,1]

现在,您可以并行迭代数组,并且如果辅助数组中的相应索引为0,则仅打印元素

解决方案是O(n 2 )。

答案 1 :(得分:1)

你的循环不正确。 要解决此问题,您可以使用Set来消除重复的单词。

如果问题必须通过O(n ^ 2)循环解决,则以下代码将起作用:

public class Duplicatestring {

    public static void main(String[] args) {

        String[] ip = { "mani", " manivannan", "raghv ", "mani" };
        for (int i = 0; i < ip.length; i++) {

            boolean duplicated = false;

            //search back to check if a same word already exists
            for (int j = i - 1; j >= 0; j--) {
                if(ip[i].equals(ip[j])) {
                    duplicated = true;
                    break;
                }
            }
            if(!duplicated) {
                System.out.println(ip[i]);
            }
        }

    }
}

答案 2 :(得分:0)

如果要从数组中删除副本,请调用以下方法并传递数组具有重复值..它将返回具有非重复值的数组..

call method here
ip = removeDuplicates(ip);

public static int[] removeDuplicates(int[] arr){
    //dest array index
    int destination = 0;

    //source array index
    int source = 0;

    int currentValue = arr[0];

    int[] whitelist = new int[arr.length];
    whitelist[destination] = currentValue;
    while(source < arr.length){

        if(currentValue == arr[source]){
            source++;
        } else {
            currentValue = arr[source];
            destination++;
            source++;
            whitelist[destination] = currentValue;
        }
    }
    int[] returnList = new int[++destination];

    for(int i = 0; i < destination; i++){
        returnList[i] = whitelist[i];
    }

    return returnList;
}

它将返回非重复值数组.. !!

答案 3 :(得分:0)

你可以试试这个:

public class HelloWorld{

 public static void main(String []args){
    String[] names = {"john", "adam", "will", "lee", "john", "seon", "lee"};
    String s;
    for (int i = 0; names.length > i; i ++) {
        s = names[i];
        if (!isDuplicate(s, i, names)) {
            System.out.println(s);
        }
    }
 }
 private static boolean isDuplicate(String item, int j, String[] items) {
    boolean duplicate = Boolean.FALSE;
     for (int i = 0; j > i; i++) {
         if (items[i].equals(item)) {
             duplicate = Boolean.TRUE;
             break;
         }
     }
     return duplicate;
 }
}

<强>输出

john
adam
will
lee
seon

答案 4 :(得分:-1)

如果字符串顺序对你无关紧要,你也可以使用TreeSet ..检查下面的代码..简单而甜蜜。

import java.util.Arrays;
import java.util.List;
import java.util.TreeSet;

public class MyArrayDuplicates { 
    public static void main(String a[]){
        String[] strArr = {"one","two","three","four","four","five"};
        //convert string array to list
        List<String> tmpList = Arrays.asList(strArr);
        //create a treeset with the list, which eliminates duplicates
        TreeSet<String> unique = new TreeSet<String>(tmpList);
        System.out.println(unique);
        System.out.println();
        Iterator<Integer> iterator = unique.iterator();

       // Displaying the Tree set data
       while (iterator.hasNext()) {
           System.out.print(iterator.next() + " ");
       }
    }
}

它将打印为 -

[five, four, one, three, two]

five
four
one
three
two