Способов решения может быть несколько.
- Произвести замены комбинаций "xx" на "x_x" для всех x (0,1,...9)
Сделать сплит по "_" и далее исследовать отрезки
- Применить метод "двух указателей": первый на начале последовательности, второй бежит до запретной комбинации
Далее обработка полученного отрезка и "скачок" первого указателя на место второго.
- Комбинированный способ, который и будет применен.
Для способа I, обычно используют сортировку по длине отрезков. Вообще это достаточно трудоемко, поэтому можно:
- найти максимальную длину
- "оставить только длинные" и отсортировать только их
В чем состоит предлагаемая идея:
- Найти в последовательности все индексы i : s[i] == s[i-1] (s - исследуемая строка) - это "по существу точки сплитования"
- Создать список границ таких отрезков: [(i,j) ... ]
- Найди максимум длин этих отрезков и оставить "верхушку" (например те, у которых длина больше 90% от максимума)
- Отсортировать и вывести "нужную" статистику/информацию для "визуального отбора"
ЗЫ. Похоже длина кода будет меньше описания :)