このTopCoderの問題はPracticeRoomのみでみられるようである。問題についておおまかに説明する。
元の文字列の部分列を最大で1箇所ひっくり返し、角カッコ([と]のこと)で囲うというものは、暗号化する方法として安全とは言えない。例えば、暗号化された"he[row oll]ld"という文字列は"hello world"になる。sという暗号化された文字列が与えられたとき、元の文字列を返すようなメソッドを作成せよ。
注意点としては、文字列は小文字のアルファベット、スペース、角カッコのみから構成されること、また、角カッコは対になって出現するか、まったく出現しないかのどちらかになる。したがって、角カッコがない場合にも対処が必要になる。
私の解答はこちら。
public class ReversingBrackets {
public String removeBrackets(String s) {
String[] ss = s.split("[\\[\\]]"); // [と]を区切り文字にする
StringBuffer sb = new StringBuffer();
for( int i=0 ; i<ss.length ; i++ ){
if( i == 1 ){ // ここに入るのは[]があったときのみ
StringBuffer tmp = new StringBuffer();
tmp.append(ss[i]).reverse();
sb.append(tmp);
}else{
sb.append(ss[i]);
}
}
return sb.toString();
}
}得点は237.70/250、中央値は約226点。[]があればssの長さは3、なければ1になるという性質を利用。また、区切り文字の有無を判定するには、indexOfを利用する方法も有力だろう。このsplitメソッドを用いた解答は少ない印象でした。

0 件のコメント:
コメントを投稿