0

我在弄清楚如何检查用户输入的重复字母时遇到了问题。程序需要将重复的字母输出为真,如果没有则输出为假。程序不应计算重复的数字或符号。

例如:

  • 用户输入:巧克力
    程序输出:真

  • 用户输入:112 cream
    程序输出:False

4

6 回答 6

5

这是另一个版本,基于@rell 的回答,但没有HashSet或没有char[]创建。

private static boolean check(String input) {
    for (int i = 0; i < input.length(); i++) {
        char ch = input.charAt(i);
        if (Character.isLetter(ch) && input.indexOf(ch, i + 1) != -1) {
            return true;
        }
    }
    return false;
}

对于较小的输入字符串,这很可能会更快。但是对于更长的输入字符串,来自@rell 的版本可能会更快,因为他使用的是HashSet带有O(1)查找/插入的 a,并且由于循环是O(n)总数是O(n). 我的解决方案是O(n^2)(循环O(n)乘以 with indexOfO(n),最坏的情况输入将是这样的abcdefghijklmnopqrstuvwxyzz

使用流更新另一个版本。

private static boolean check(String input) {
    IntStream characters = input.codePoints().filter(Character::isLetter);
    return characters
            .distinct()
            .count() == characters.count();
}

更新修复了流版本中的错误

于 2016-03-19T09:15:50.137 回答
2
private static boolean check(String input) {
    Set<Character> tmp = new HashSet<Character>();
    for(char ch : input.toCharArray()) {
        if (Character.isLetter(ch) && !tmp.add(ch)) {
            return true;
        }
    }
    return false;
}
于 2016-03-19T09:01:19.177 回答
0

尝试这个 :

    String username ;
    char[] x = username.toCharArray();
    boolean duplicates=false;
    for (j=0;j<x.length;j++)
      for (k=j+1;k<x.length;k++)
        if (x[k] == x[j])
          duplicates=true
于 2016-03-19T08:34:20.673 回答
0

为了检查任何字母的重复次数是否超过限制次数,您可以使用以下方法:

public static boolean repeatedMoreThanLimitedLength(String str, int limitLength) {
    Pattern pattern = Pattern.compile("(\\w)\\1+");
    Matcher matcher = pattern.matcher(str);
    while (matcher.find()) {
        if (matcher.group().length() >= limitLength)
            return true;
    }
    return false;
}
于 2021-12-14T20:28:25.823 回答
0

1.) 对字符数组进行排序。

2.) 遍历数组以查看第 i 个值是否 == (i+1) 个值。如果找到,则返回 false。否则,返回真。

时间复杂度:O(nlogn)(用于排序)

空间复杂度:O(1)

于 2016-03-19T10:31:55.947 回答
0

我们可以用这个减少到单循环。

    boolean checkDuplicates(char[] x)
    {
     Set<char> xSet = new HashSet<char>();
       for (char c : x)
       {
        if (xSet.contains(c)) return true;
        xSet.add(i);
       }
     return false;
    }
于 2016-03-19T10:00:52.460 回答