Назначьте оценку известным заменам на основе продолжительности замены и количества вхождений. Наивно, я бы предложил сделать эту оценку пропорциональной квадрату длины (более длинные совпадения реже, в большинстве сценариев, о которых я могу думать) и квадратному корню из числа вхождений, так что последовательность из 4 элементов имеет такой же вес как последовательность из 2 элементов, которая встречается в 16 раз чаще. Это должно быть скорректировано в зависимости от вашей реальной ситуации.
При заданной последовательности длины M имеется N подстрок длиной от 1 до M, где N = M * (M + 1) / 2, поэтому, если строки достаточно короткие, вы можете перебрать каждую подстроку и посмотреть возможные замены. Я думаю, что количество способов составить целую строку из этих подстрок пропорционально M ^ 2.
Для каждой возможной композиции исходной строки по подстрокам суммируйте общий балл лучшей (самой высокой) замены для каждой подстроки.
Композиция с наивысшей общей оценкой будет (потенциально, учитывая мои предположения о процессе) «лучшим» результатом после замены.