Java重复字母检查字符串

时间:2016-03-19 07:26:49

标签: java input letters-and-numbers

我无法确定如何检查用户输入的重复字母。程序需要将重复的字母输出为true,如果没有则输出为false。程序不应将数字或符号统计为重复。

例如:

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

  • 用户输入:112奶油
    程序输出:错误

5 个答案:

答案 0 :(得分:3)

以下是另一个版本,基于@rell的回答,但未创建HashSetchar[]

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),并且因为循环是O(n),所以总数为{{1 }}。我的解决方案是O(n)(循环O(n^2)乘以O(n)乘以indexOf),最差情况输入将类似于O(n)

更新另一个包含流的版本。

abcdefghijklmnopqrstuvwxyzz

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

答案 1 :(得分: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;
}

答案 2 :(得分: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

答案 3 :(得分: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;
    }

答案 4 :(得分:0)

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

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

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

空间复杂度:O(1)