Brain teaser

In response to Dustin Diaz (you’ll need a JavaScript 1.8 capable browser, or Ojay):

var arr = ['a', 'b', 'c', 'c', 'd','e', 'e',
'e', 'e', 'e', 'f', 'e', 'f', 'e',
'f', 'a', 'a', 'a', 'f', 'f', 'f'];

arr.reduce(function(memo, letter) {
    var last = memo[memo.length - 1];
    if (!last || last[0] != letter) memo.push([letter]);
    else last.push(letter);
    return memo;
}, []).map(function(group) {
    return group.join(' ').replace(/^(\w \w) (.*)$/g,
            '$1 <span>$2</span>');
}).join(' ');

// -> "a b c c d e e <span>e e e</span> \
//     f e f e f a a <span>a</span> f f \
//     <span>f</span>"