-1

文字列内の一意の文字を数えたい

入力:

"aabbccdefgh"

出力:

8

私のコードは機能せず、エラーをスローします:

私のコード:

public class test {

    public static void main(String[] args) {
    String[] s = {""};
    int counter = 0;
    int pom  = 0;
    for(int i = 0; i < s.length; i++){
        for(int y = 0; y < 128; y++){
            if(s[i].compareTo(args[y])>0){
                pom++;
            }
        }
    }
    while(pom == 1){
        counter++;
    }
    System.out.println(counter);
}
}

誰かが私が間違っているところを指摘できますか?

4

8 に答える 8

3

を使用しSetます。一意性が保証されるため、各キャラクターを追加した後、セットのサイズが答えになります.

于 2013-01-02T15:29:48.163 に答える
2

Setトークンの一意の数をカウントするために使用しないのはなぜですか?

String str = "aabbccdefgh";
HashSet<Character> set = new HashSet<Character>();    

for (int i=0; i < str.length; i++) {
    char c = str.charAt(i);
    set.put(c);
}

System.out.println(set.size());
于 2013-01-02T15:29:25.337 に答える
1
public static void main(String[] args) {
    String str = "aabbccdefgh";
    int count = 0;
    for (int i = 0; i < str.length(); i++) {
        if (str.substring(0, i).contains(str.charAt(i) + ""))
            System.out.println();

        else
            count++;
    }
    System.out.println(count);

}

set を使用せずにこれを試してください。

于 2013-01-02T15:46:25.560 に答える
1

エラーの根本原因は次のコードだと思います。

for(int y = 0; y < 128; y++){
    if(s[i].compareTo(args[y])>0){
        pom++;
    }
}

args[y]具体的には、ループ内での比較です。上記のコードは、Java プログラムを呼び出すときに少なくとも 128 個のパラメーターを渡すことを前提としています。つまり、

java test param0 param1 ... param127

そして、私はあなたが得ていると確信していますArrayIndexOutOfBoundsException

原因がわかったので、@Kevin の回答を使用して問題を解決してください。

于 2013-01-02T15:28:54.307 に答える
0
public static void main(String[] args) {
    String str = "aabbccdefgh";

    Map<Character, Integer> map = new HashMap<Character, Integer>();

    for (int i = 0; i < str.length(); i++) {
        Integer count = map.get(str.charAt(i));
        if (count == null)
            map.put(str.charAt(i), 1);
        else
            map.put(str.charAt(i), count + 1);
    }

    int uniqueCount = 0;

    for (Integer i : map.values())
        if (i == 1)
            uniqueCount++;

    System.out.println(uniqueCount);

}

これは、Mapを使用して、指定された文字列内で1回だけ出現する文字の出現をカウントする別の回答です。

于 2013-01-03T09:34:51.287 に答える
0

一意の文字数を数えたい場合、 set はオプションではありません。これは、 set には繰り返し文字が 1 回含まれているためです。たとえば、「galaxy」は 4 を返す必要がありますが、set を使用すると、「a」も含まれるため 5 が返されます。

于 2013-07-09T12:05:26.547 に答える
0

すでに Java 8 を使用している場合は、次のコードを使用します。

public static void main(String[] args) {

    System.out.println(countDistinctCharacters("aabbccdefgh"));
}

public static long countDistinctCharacters(String letter) {
    return letter.chars().distinct().count();
}
于 2016-03-05T22:05:35.767 に答える
0

タスクは、文字列内で 1 回出現する文字のみをカウントすることなので、a を使用しMap<Character, Integer>て文字の頻度をカウントします。それ以外の場合、ロジックは他の回答にほとんど示されています。

于 2013-01-02T15:37:09.443 に答える