今日のTopCoderの問題はこちらで見ることができる(要TopCoder登録 & 問題文は英語)。それでは、問題について説明する。
カナダからアメリカに引っ越した二人はZEEという単語に困惑している。文字列textが与えられたときに、列中のZEEという単語をZEDという単語に置き換えるようなアシストをしてほしい。ここで言うZEEは前後に空白が含まれる単語であり、ZEEDという単語があった場合、それは置き換える必要はないものとする。また、単語の前後の空白はスペース一つであるものとする。
私の解答は以下の通り。問題文にtextは50字以内という条件があったので、それを利用した。
public class CultureShock { public String translate(String text) { for( int i=0 ; i<20 ; i++){ text = text.replaceAll(" ZEE ", " ZED "); // textの途中の文字を置き換え } text = text.replaceAll("^ZEE ", "ZED "); // 先頭のZEEを置き換え text = text.replaceAll(" ZEE$", " ZED"); // 最後尾のZEEを置き換え text = text.replaceAll("^ZEE$", "ZED"); // ZEEだけだった場合の置き換え return text; } }
得点は172.22/250、中央値は約190点。上の解答はあまりきれいではないので、見かけた解答をいくつか紹介する。
- splitメソッドで配列に単語を格納し、ZEEをZEDに置き換えてそれらを空白を挟みながら、再結合する。
- text.replaceAll("\\bZEE\\b","ZED");とする。
- text = " " + text + " "と置き換え、text中の" ZEE "を" ZED "へ置換することを先頭から文字列の長さの分だけ繰り返して text.trim()で前後の空文字を外す。
0 件のコメント:
コメントを投稿