このTopCoderの問題はこちらで見ることができる(要TopCoder登録 & 問題文は英語)。問題についておおまかに説明する。
単語は連続するアルファベットの最大長である。単語は空白、数字、句読点によって分けられる。単語の平均長とは、全単語の長さの合計を単語数で割ったものである。textという文字列が与えられたとき、単語の平均長を返せ。もし、単語が無いようであれば、0.0を返すようにせよ。
私の解答はこちら。
public class TextStatistics {
public double averageLength(String text) {
String[] words = text.split("[ 0-9.,?!-]");
int nWords = words.length;
int nAlpha = 0; // アルファベットの数をカウント
int nBlank = 0; // words中の""をカウント
for( int i=0 ; i<words.length ; i++ ){
if( words[i].equals("") ){
nBlank++;
continue;
}
for( int j=0 ; j<words[i].length() ; j++ ){
char c = words[i].charAt(j); // cは2回評価するので変数にしておく
if( Character.isLowerCase(c) || Character.isUpperCase(c) ){
nAlpha++;
}else{
break;
}
}
}
if( nWords == nBlank ) return 0.0; // wordsが全部空白だった場合は0.0
return (double)nAlpha/(nWords-nBlank);
}
}得点は112/250。当初、区切り文字(words)の設定が空白だけでよいと思っていたので、そこで複数回提出になってしまった。

0 件のコメント:
コメントを投稿