私は自分のキーであるストリングを持っており、そのキーの各文字にアルファベット順を表す数字を割り当てる方法があります。例えば、私のキーは、単語「セキュリティ」の場合、出力は4, 1, 0, 6, 3, 2, 5, 7
で、次のように私のコードは次のとおりです。私はここに、配列をプリントアウト省略しました重複する文字とそのアルファベット順のキー
String key = "Security".toLowerCase();
String alphabet = Arrays.stream(key.split("")).sorted().collect(Collectors.joining());
int[] order = new int[key.length()];
for (int i = 0; i < key.length(); i++) {
order[i] = alphabet.indexOf(key.charAt(i));
}
...
このコードをキーに重複する文字が含まれていない場合は正常に動作します。しかし、例えばキーが "aardvark"になると、出力は問題になる0, 0, 5, 3, 7, 0, 5, 4
になります。私はこの問題を回避する方法を知らない。希望する出力は0, 1, 5, 3, 7, 2, 6, 4
でなければなりません。
提案がありますか?私はJavaプログラミングには新しいので、非常に複雑なソリューションを理解できないかもしれません。
ようこそを生成します!良い質問をするので、良い答えを得るためにあなたを助けるために私たちの[SO質問チェックリスト](http://meta.stackoverflow.com/questions/260648/stack-overflow-question-checklist)を確認してください。 –
私は@JoeCを持っていると思った。私が含まなかったのは、この問題を解決しようとした私の試みだけだったと思います。私は 'order'を複製し、' for'ループを使用して重複があるかどうかを調べ、もしあれば元の配列を1つ増やしました。しかし、私はまだすべての手紙のためのユニークなカウントを取得していないので、それは動作しませんでした。 –
期待される出力が「0,1,5,3,7,2,5,4」である理由を説明してください。私の理解では、「aardvark」の最初の「a」は「0」にマップされます。二番目のこともそうです。 2番目のマッピングを「インクリメント」する理由を説明してください。 – blafasel