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