このTopCoderの問題はこちらで見ることができる(要TopCoder登録 & 問題文は英語)。それでは、問題について説明する。
ピーターは難しい単語の発音に難がある。特に子音が3つ以上連続する単語が発音できない(streetとか)。さらに、異なる母音が2つ以上続いている単語も発音できない(goalとか)。同じ母音が2つ続いているものについては発音できる(needとか)。
母音はa、i、u、e、oであり、その他は子音である。単語の集まりwords[]が与えられる。もしピーターがwords[]をすべて発音できるのであれば空文字を返せ。そうでなければ、発音できないもののうち、最初に現れたものを返せ。
私の解答はこちら。
public class Pronunciation {
public String canPronounce(String[] words) {
for( int i=0 ; i<words.length ; i++ ){
int consonants = 0;
int vowel = 0;
char prevAlphabet = '\0';
for( int j=0 ; j<words[i].length() ; j++ ){
// 母音の処理
char currentAlphabet = words[i].toLowerCase().charAt(j);
if( currentAlphabet == 'a' ||
currentAlphabet == 'i' ||
currentAlphabet == 'u' ||
currentAlphabet == 'e' ||
currentAlphabet == 'o' ){
consonants = 0;
vowel++;
if( vowel >= 2 && prevAlphabet != currentAlphabet ){
return words[i];
}
prevAlphabet = currentAlphabet;
}else{ // 子音の処理
consonants++;
vowel = 0;
if( consonants >= 3 ){
return words[i];
}
}
}
}
return "";
}
}得点は197.52/250、中央値は82点。母音と子音に分けて処理を書くことでスムーズに実装できた。

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