このTopCoderの問題はこちらで見ることができる(要TopCoder登録 & 問題文は英語)。
頭韻とは、二つ以上の連続する単語が同じ文字で始まることをいう(大文字・小文字の区別は無視)。words[]という単語の配列が与えられたとき、それ以上拡張ができないもののみを考慮し、頭韻の数を返すメソッドを作成せよ(要は同じ頭文字で続くものが3つあった場合、2つ連続したものがが2つあると数えないという意味である)。
私の解答はこちら。
public class Alliteration { public int count(String[] words) { String str = ""; for( int i=0 ; i<words.length ; i++ ){ str += words[i].substring(0, 1).toLowerCase(); } int n = 0; int cnt = 1; char c = str.charAt(0); for( int i=1 ; i<str.length() ; i++ ){ if( str.charAt(i) == c ){ cnt++; if( cnt == 2 ) n++; // 連続で2回続いたらカウント(3回以上は無視) }else{ c = str.charAt(i); cnt = 1; } } return n; } }
得点は238.33/250、中央値は約194点。わざわざfor文を2回にしなくても、1回のループで解くことができることには後から気付きましたとさ。