50 км, за городом снежно и белоСнегопадик

Моё решение одной задачки

Решил попробовать решить задачку, но не как все =)
Если в условии задачи будет указано, что буквы в токене не должны пересекаться (то есть, в строке 'ooooo' ищем oo и независимых токенов здесь будет именно 2, то есть, найденный токен считается найденным и не будет входить в состав следующего найденного токена), то решение такое:
 
$out = sizeof(explode($r, $str))-1;
 
sizeof - размер массива,
explode - разбить строку по строке;
 
этот алгоритм можно также использовать, даже если условие такого не задали, для токенов, у которых оба символа разные.
 
============
если же символы одинаковые, тогда делаем так (-:
 
$t = array_count_values(explode($r[0], $str));
$out = $t['']-1;
 
здесь мы разбиваем массив только по первому символу и считаем дырки. Дырки - это как-бы то, что остаётся между одинаковыми символами.
 
Применён язык php, но для других, в которых нет таких функций, или нужно ускорить или оптимизировать, то вперёд, пишем и оптимизируем этот алгоритм.
 
explode - один проход цикла. считать дырки в массиве - один проход цикла. итого - два цикла. 
Хотя для случая если символы разные - всего один.
 
Хотя первый вариант можно сделать и сразу одним циклом, если цикл разбития по символу соединить с подсчётом дырок. То есть, находим символ, и если за ним идёт такой же символ, то счётчик+1 и так далее.