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