-6

语言:Java 重点说明: *需要使用 For 循环或 While 循环遍历字符串 *它删除字符串的重复字母并返回没有重复的单词。

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

到目前为止我有这个

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

6 回答 6

1

您可以使用正则表达式来做到这一点。例如:

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"
}
于 2013-08-25T05:52:26.050 回答
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();
}
于 2013-08-25T07:09:37.113 回答
0

试试这个衬里:

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

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


目前尚不清楚“重复”是指紧随其后还是之后出现。对于任何地方,使用这个:

private String removeAnyDuplicates(String userWord) {
    return userWord.replaceAll("(.)(?=.*\\1)", "");
}
于 2013-08-25T05:58:50.183 回答
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("\\[|\\]|\\,","") ;
}
于 2013-08-25T06:02:46.040 回答
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;
}

看看这个答案

于 2013-08-25T05:55:12.153 回答
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;
于 2013-08-25T05:56:16.050 回答