2011年7月12日火曜日

TopCoder SRM199 Div2 250Pts

今日のTopCoderの問題はこちらで見ることができる(要TopCoder登録 & 問題文は英語)。

問題について説明する。

文字列の掛け算というものを次のように定義する。

  • 空の文字列("")にどんな整数を掛けても空の文字列になる
  • 整数0を掛けると、どんな文字列も空の文字列になる
  • 空でない文字列に正の整数を掛けると、文字列をその値の数だけ繰り返す
  • 空でない文字列に負の整数を掛けると、文字列を反転させたものを、その数だけ繰り返す

文字列sFactor、整数iFactorを与えたときに、以上のルールに従って得られる文字列を返すメソッドを作成せよ。

私の解答は以下の通り。

public class StringMult {

 public String times(String sFactor, int iFactor) {
  if( sFactor.equals("") || iFactor ==0 ){
   return "";
  }
  if( iFactor < 0 ){
   StringBuffer sb = new StringBuffer(sFactor);
   sFactor = sb.reverse().toString();
   iFactor = Math.abs(iFactor);
  }
  String result = "";
  for( int i=0 ; i<iFactor; i++ ){
   result += sFactor;
  }
  return result;
 }

}

得点は239.13/250、全体の正解率は約94.4%。

文字列の反転はStringBufferクラスにメソッドが用意されているので、それを用いる。また、文字列の結合はStringよりもStringBufferを用い、appendメソッドで結合していくのが高速化できるポイントになるようだ。

0 件のコメント:

コメントを投稿

フォロワー

ブログ アーカイブ

ページビューの合計