0

繰り返されたユーザー入力文字からチェックする方法を理解するのに問題があります。プログラムは、繰り返される文字を真として出力し、存在しない場合は偽として出力する必要があります。プログラムは、数字や記号の繰り返しを数えるべきではありません。

例えば:

  • ユーザー入力: チョコレート
    プログラム出力: True

  • ユーザー入力: 112 クリーム
    プログラム出力: False

4

6 に答える 6

5

これは、@rell からの回答に基づく別のバージョンですが、noHashSetまたはchar[]creation はありません。

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)O(n)O(n^2)O(n)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 に答える
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 に答える
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

1.) 文字配列をソートします。

2.) 配列を繰り返し処理して、i 番目の値 == (i+1) 番目の値かどうかを確認します。見つかった場合は、false を返します。それ以外の場合は、true を返します。

時間計算量: O(nlogn) (ソート用)

スペースの複雑さ: O(1)

于 2016-03-19T10:31:55.947 に答える