1

練習のために、Java で ASCII 文字列を頻度順に並べ、次にアルファベット順に並べたいので、「banana」は「bnnaaa」になり、「grammar」は「gaammrr」になるはずです。これが私がこれまでに持っているものです。

public static orderByFrequencyAndThenAlphabet(String str) {
  // 128 ASCII characters possible.
  int[] charCount = new int[128]

  // Get the counts.
  str = str.toCharArray();
  for (char c : str) {
    charCount[int(c)] += 1;
  }

  // Sort by frequency...
}

ご覧のとおり、入力文字列の各文字のカウントを格納するデータ構造を作成しました。ただし、データ構造を使用して文字を頻度順に並べ替えるにはどうすればよいでしょうか? 優先キューの使用を検討する必要がありますか?

4

1 に答える 1

1

文字配列を作成してすべての文字を文字列に格納するだけです (文字配列のサイズは文字列の長さである必要があります)。次に、文字配列にソートを適用し(使い慣れたバブルソート)、ソートされた文字配列を使用して新しい文字列を作成します(配列をソートするときは、適切な文字ケーシングを確認してください)。これは非効率的ですが、仕事は完了します。

于 2012-11-07T01:28:45.237 に答える