Задачу можно решить методом замен (меняем 20, гласные и остальные) - задача сводится к последовательности из трех знаков.
Спилитуем по одному из знаков, далее в каждом фрагменте находим нужную подпоследовательность.
Это логичный способ, но его недостаток в том, что к результату надо "что-то" добавлять и нельзя посмотреть на саму последовательность
(то есть, если вопрос немного усложнить - например, вывести "слитную" подпоследовательность согласных внутри найденного, то будут сложности)
Попробуем использовать метод конечных автоматов (некоторое обобщение Машины Тьюринга) с двумя состояниями:
- 0 - поиск гласной (начальное)
- 1 - обработка фрагмента
Перебор осуществляем циклом по всей строке (начинаем с первой позиции, чтобы можно было проверять биграмму)
В состоянии 0:
- если встречаем '20', то в список мест добавляем начало биграммы
- если встречаем "Гласную", переходим в состояние 1
В состоянии 1 (в теле цикла после состояния 0 через if, то есть МТ как-бы остается на месте)
- проверяем достаточность пар (то есть длину списка мест)
- если достаточно то вычисляем начало, сравниваем с результатом и, при необходимости сохраняем
- в результат записываем длину фрагмента и индексы его границ
- сбрасываем счетчик мест (делаем пустым)
- переходим в состояние 0
По завершении работы:
- выводим результат
- фрагмент, на котором получен результат (для визуального контроля)
Конечно, можно обойтись и без выделения состояний, то так более понятен смысл алгоритма и его связь с МТ
Фактически используем пару состояний, алфавит из трех символов ( "20", "гласная", "все остальное").
Задачу решаем в один проход, видим полноценный результат, который может быть обработан дальше.
Ниже код программы с комментариями