2012-04-19 9 views
0

特定のアルファベットの数字Stringをテキストベースのフォーマットに変換する必要がある問題に取り組んでいました。 Example: a = 2, c = 222, f = 333など。これを明確にするために、これは携帯電話のキーパッドにあります。あなたのQWERTYキーボードを持っていない古いハードキーの携帯電話のテキストのように。ここで対応するキーストロークのアルファ数値ストリング

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

私が考えていたものです。すべての症例(全部で26 + 10)をHashMapにあらかじめロードして使用することができます。しかし、私はこれを行うには他にも良い方法があるはずだと思いますか?すべての/素晴らしいアイデアは大歓迎です。

+1

"テキストベースのフォーマット"とは、具体的には何を意味しますか?変換の問題の例は、常に入力/出力のペアを示す必要があります。 – mellamokb

+1

変換が式に従うならば、式ad-hocを計算できます。そうでなければ '地図'がうまくいくと思います。 – twain249

+0

@mellamokb:ここで、サンプル 'input'と' output'を表示するように編集しました – noMAD

答えて

1

HashMapはあなたが

をやりたいための最も簡単な方法でしょう、あなたは新しいクラスとして、あなたのルックアップテーブルの実装を検討することをお勧めします。クラスの内部は文字列の配列にすることができると思っています。配列内でルックアップを実行すると、探している文字から 'a'の文字を引くことができ、配列インデックスになります。 (句読点の場合、減算の結果が0から25の間でない場合は、特殊なケースで扱うことができます)。このメソッドは、ハッシュ関数をバイパスし、パフォーマンスを向上させます。

1

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

文字列内の各文字の発生頻度を計算し、出現回数(c)x numberFor(c)を追加することができます(例では555を2回追加する代わりに2 x 555)。


更新:特別なケースでは、最適化が行われる可能性があります。例えば。すべてを0にマッピングする極端な例では、計算は簡単になり、ハッシュマップは必要ありません;たぶん、各英数字が異なる素数に対応するのでしょうか?あなたは、マッピングの静的セットで作業しているので

関連する問題