この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 件のコメント:
コメントを投稿