2012年4月18日水曜日

TopCoder SRM376 Div2 250Pts

このTopCoderの問題はこちらで見ることができる(要TopCoder登録 & 問題文は英語)。問題文についてざっくりと説明する。

文字列documentの連続する!を1つにまとめよ。ただし、!に?が1つ以上くっついている場合は!ではなく?1つにまとめよ。documentという入力の文字列をまとめた結果を返せ。例えば!!!は!になるし、!?abc!!!は?abc!となる。空白はそのまま扱う。

私の解答はこちら。

public class PunctuationCleaner {

 public String clearExcess(String document) {
  boolean isPunc = false;
  boolean containQuestion = false;
  StringBuilder sb = new StringBuilder();
  char c;
  for( int i=0 ; i<document.length() ; i++ ){
   c = document.charAt(i);
   if( c == '!' ){
    isPunc = true;
   }else if( c == '?' ){
    containQuestion = true;
   }else{ // !でも?でもない文字が来た場合
    if( containQuestion ){
     sb.append('?');
     containQuestion = false;
     isPunc = false;
    }else if( isPunc ){
     sb.append('!');
     isPunc = false;
    }
    sb.append(c);
   }
  }
  // 最後の文字が!だった場合などの処理
  if( containQuestion ) sb.append('?');
  else if( isPunc ) sb.append('!');
  return sb.toString();
 }

}

得点は146.37/250、2回目のsubmitでシステムテストクリア。正規表現使えるようになりたい...

0 件のコメント:

コメントを投稿

フォロワー

ブログ アーカイブ

ページビューの合計