2012年12月19日水曜日

TopCoder SRM445 Div2 300Pts

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

コメントを投稿

フォロワー

ページビューの合計