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