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