2011年8月11日木曜日

TopCoder SRM214 Div2 250Pts

今日のTopCoderの問題はこちらで見ることができる(要TopCoder登録 & 問題文は英語)。それでは、問題について説明する。

ブログを書く人を楽にするために、htmlのタグの自動補完を行うようにしたい。文字列textが与えられたときに、_と_の間はiを用いたタグで挟み、*と*の間はbを用いたタグで挟むようにするメソッドを作成せよ。

私の解答は以下の通り。タグを開く方か否かを管理する変数inI、inBを導入することによって解いた。

public class bloggoShortcuts {
 public String expand(String text) {
  StringBuffer sb = new StringBuffer();
  boolean inI = false;
  boolean inB = false;
  for( int i=0 ; i<text.length() ; i++ ){
   if( text.charAt(i) == '_' && inI == false ){
    sb.append("<i>");
    inI = true;
   }else if( text.charAt(i) == '_' && inI == true ){
    sb.append("</i>");
    inI = false;
   }else if( text.charAt(i) == '*' && inB == false ){
    sb.append("<b>");
    inB = true;
   }else if( text.charAt(i) == '*' && inB == true ){
    sb.append("</b>");
    inB = false;
   }else{
    sb.append(text.charAt(i));
   }
  }
  return sb.toString();
 }
}

得点は236.88/250、中央値は221.09。提出者の正解率は約91%。textが*をcontainsしているうちは、while文でtext.replaceFirstを2回適用し、1回目はタグを開く方、2回目はタグを閉じる方で置換するという方針で解いているプログラムがあったのが印象に残った(iによるタグ付けについても同様のループを行う)。

0 件のコメント:

コメントを投稿

フォロワー

ブログ アーカイブ

ページビューの合計