このTopCoderの問題はこちらで見ることができる(要TopCoder登録 & 問題文は英語)。問題文についておおまかに説明する。
ジョンはセキュリティに関心を示している。彼は友人のブラスに手紙を書いており、他の誰にも読めないようにしたいと思っている。ジョンはメッセージをエンコードするための単純な置換の暗号を使っている。メッセージの各文字は、それに対応する代わりのアルファベットで置き換えられる。置き換えたアルファベットはすべて元のアルファベットの順列の1つである。この問題では、アルファベットは小文字のみからなるものとする。元のメッセージが与えられたとき、辞書順で最も速くなる暗号化された文字列を返せ。例えば、"hello"という文字列は"abccd"になる。これはhをa、eをb、lをc、oをdとすることで得られる。
私の解答はこちら。
import java.util.HashMap; public class TheEncryptionDivTwo { public String encrypt(String message) { // HashMapは対応表の作成に用いる。キーが元のアルファベット、値が置換後のアルファベット HashMap<Character, Character> hm = new HashMap<Character, Character>(); StringBuilder sb = new StringBuilder(); char ch = 'a'; for( int i=0 ; i<message.length() ; i++ ){ char current = message.charAt(i); if( hm.containsKey(current) == false ){ hm.put(current, ch); sb.append(ch); ch++; }else{ sb.append(hm.get(current)); } } return sb.toString(); } }
得点は289.64/300、1回のsubmitでシステムテストクリア。300点にしては簡単なのではないか。
0 件のコメント:
コメントを投稿