このTopCoderの問題はこちらで見ることができる(要TopCoder登録 & 問題文は英語)。それでは、問題について説明する。
英語では音節は遮られない音の集まりとゆるやかに定義される。発音された数で音節を定義するということもある。ただ、一般には単語の音節を数えるプログラムを書くのは容易ではない。ここでは、音節を数えるのに次の手続きを踏むものとする。それはA、E、I、O、Uという母音の集まりを1つの音節とし、単語の音節の総数に1つ加えるということである。
母音の集合は子音(母音でない21の文字)、もしくは単語の先頭または最後尾によって区切られる。例えば、FOOBARは2つの音節がある。OO、Aの二つが音節になる。
inputという文字列が引数に与えられたときに、上の音節の数え方で、単語にいくつ音節が含まれているかを返すメソッドを作成せよ。
私の解答はこちら。
public class SyllableCounter { public int countSyllables(String word) { boolean inVowel = false; // 注目している文字が母音ならtrue boolean prev = false; // 直前の文字が母音ならtrue int cnt = 0; // 音節の登場回数 for( int i=0 ; i<word.length() ; i++ ){ if( word.charAt(i) == 'A' || word.charAt(i) == 'I' || word.charAt(i) == 'U' || word.charAt(i) == 'E' || word.charAt(i) == 'O' ){ inVowel = true; }else{ inVowel = false; } if( inVowel == true && prev == false ){ cnt++; // 新たに母音が現れた } prev = inVowel; // 注目している文字は注目する文字の直前の文字になる } return cnt; } }
得点は238.15/250。C言語にはないbooleanが大活躍するプログラムですね。
0 件のコメント:
コメントを投稿