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