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