0

特定の英数字Stringをテキストベースの形式に変換する必要があるという問題に取り組んでいました(正確に何と呼ぶべきかわかりません)。Example: a = 2, c = 222, f = 333より明確にするために、これは携帯電話のキーパッドにあります。QWERTY キーボードのない古いハードキー電話でテキストを入力する方法と同じです。

Example: (INPUT) hello (OUTPUT) 44+33+555+555+666

これが私が念頭に置いていたものです。すべてのケース (全体で 26 + 10) を a にプリロードして、HashMapそれを使用できます。しかし、これを正しく行うための他の良い方法があるはずだと思いますか?あらゆる素晴らしいアイデアを歓迎します。

4

2 に答える 2

1

文字列 (または単一の文字!?) を数値に関連付ける必要があるため、java.util.Map 実装を使用するよりも簡単な方法はありません。

計算部分では、最初に文字列内の各文字が発生する頻度を計算してから、occurrance(c) x numberFor(c) (この例では 555 の 2 倍を追加する代わりに 2 x 555) を追加できます。


更新: 考えてみると、特殊なケースでは、最適化があるかもしれません。たとえば、すべてを 0 にマッピングする極端なケースでは、計算は簡単になり、ハッシュマップは必要ありません;) それとも、すべての数値が正でしょうか? たぶん、各英数字は異なる素数にマップされますか?

于 2012-04-19T17:01:30.517 に答える
1

HashMapあなたが望むことをする最も簡単な方法でしょう

マッピングの静的セットを使用しているため、ルックアップ テーブルを新しいクラスとして実装することを検討する必要がある場合があります。クラスの内部は単なる文字列の配列であると考えています。配列内で検索を行う場合、検索している文字から「a」文字を引くと、それが配列インデックスになります。(句読点については、減算の結果が 0 から 25 の間にない場合は、特殊なケースで処理できます)。このメソッドは、ハッシュ関数をバイパスし、パフォーマンスを向上させます。

于 2012-04-19T17:14:09.893 に答える