2012年2月18日土曜日

TopCoder SRM332 Div2 250Pts

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

コメントを投稿

フォロワー

ブログ アーカイブ

ページビューの合計