如何使用循环(for或while)循环删除重复的字母

时间:2013-08-25 05:46:00

标签: java

语言:Java 注意事项:*需要使用For循环或While循环遍历String            *它删除了String的重复字母,并返回没有dupilcates的单词。

例如:字符串是HELLO - 然后该方法循环并删除任何重复项,在本例中为“L”并在最后返回HELO

我到目前为止

private String removeAnyDuplicates(String userWord)
{
   //Code goes here?
   return "" ; // Need to return the new string
}

6 个答案:

答案 0 :(得分:1)

您可以使用regular expressions执行此操作。 e.g:

private static final Pattern REGEX_PATTERN = 
        Pattern.compile("(.)\\1*");

public static void main(String[] args) {
    String input = "HELLO, AABBCC";

    System.out.println(
        REGEX_PATTERN.matcher(input).replaceAll("$1")
    );  // prints "HELO, ABC"
}

答案 1 :(得分:1)

我假设删除重复项意味着结果最多只包含一个任何字符。 (其他一些答案假设相邻的重复项只需要减少到单次出现。)基本算法将是:

  • 将结果初始化为空字符串
  • 循环输入的每个字符,如果结果中没有字符,则将其附加到结果
  • 返回结果

一个天真(效率很低)的实现将是:

private String removeAnyDuplicates(String userWord)
{
    String result = "";
    for (int i = 0; i < userWord.length(); ++i) {
        char c = result.charAt(i);
        if (result.indexOf(c) < 0) {
            // negative index indicates not present
            result += String.valueOf(c);
        }
    }
    return result;
}

这有两个主要的低效率来源:它创建了许多中间String对象,并且它必须扫描输入的每个字符到目前为止的整个结果。这些问题可以通过使用其他内置Java类来解决 - StringBuilder可以更有效地累积结果,Set实现可以有效地记录和测试已经看到的字符:

private String removeAnyDuplicates(String userWord)
{
    int len = userWord.length();
    StringBuilder result = new StringBuilder(len);
    Set<Character> unique = new HashSet<Character>();
    for (int i = 0; i < len; ++i) {
        char c = result.charAt(i);
        // try to add c to set of unique characters
        if (unique.add(c)) {
            // if it succeeds, this is the first time seeing c
            result.append(c);
        }
    }
    return result.toString();
}

答案 2 :(得分:0)

private String removeAnyDuplicates(String userWord)
{
    CharSequence inputStr = userWord;
    int length = inputStr.length();
    Set<Character> uniqueChars = new HashSet<Character>();

    for(int i=0; i < length; ++i) {
        uniqueChars.add(inputStr.charAt(i));
    }

    return uniqueChars.size() >= 3;
}

查看此answer

答案 3 :(得分:0)

将字符串转换为char数组,并将其存储在LinkedHashSet中。这将保留您的订购,并删除重复。

像这样:

private static String removeAnyDuplicates(String userWord)
    {
        char[] chars = userWord.toCharArray();
        Set<Character> charSet = new LinkedHashSet<Character>();
        for (char c : chars) {
            charSet.add(c);
        }

        StringBuilder sb = new StringBuilder();
        for (Character character : charSet) {
            sb.append(character);
        }

       return sb.toString();
    }

记住:

import java.util.LinkedHashSet;
import java.util.Set;

答案 4 :(得分:0)

试试这个衬垫:

private String removeAnyDuplicates(String userWord) {
    return userWord.replaceAll("(.)\\1+", "$1");
}

这使用正则表达式来查找重复的(2个或更多)字母,并用单个字母实例替换它们。


目前还不清楚“重复”是否意味着立即之后 之后。对于任何地方,请使用:

private String removeAnyDuplicates(String userWord) {
    return userWord.replaceAll("(.)(?=.*\\1)", "");
}

答案 5 :(得分:0)

你可以试试这个

public static void main(String args[]){
    System.out.println(removeAnyDuplicates("HELLO"));
}

private static String removeAnyDuplicates(String userWord)
{
    char[] arr=userWord.toCharArray();
    List<String> list=new ArrayList<>();
    for(int i=0;i<arr.length;i++){
         if(!list.contains(String.valueOf(arr[i]))){
             list.add(String.valueOf(arr[i]));
         }
    }
    return list.toString().replaceAll("\\[|\\]|\\,","") ;
}