хм, тут зависит еще от вводных. Если не прибегать к определенным фишкам языков, а абстрагироваться тем, что есть почти везде, то я бы скорее всего делал так:
1) Сделал бы мэп, хешмэп и (co.) в виде "String, int", где стринг это будет часть разбитой подстроки, а инт - это каунтер
2) Брал бы подстроку и разбивал ее почастично, добавляя в эту структуру данных с инициальным каунтером 1, но
2.2) Добавляя делать проверку, есть ли такой паттерн уже в ней? если да, то увеличить каунтер
2.3) Если нету, то добавить в новый индекс с базовым каунтером.
3) в самом конце пробегаешься по структуре данных, где каунтер 2 и выше, вычисляя приэтом максимум из кол-ва символов в подстроках