У вас есть другая проблема, объединение двух фраз может образовать третью фразу. Например, если у вас есть
list...4
sting...6
ingrave...7
abcd...5
тогда решение "listingrave
" имеет "усиление" 17, тогда как все, что вы можете сделать с "abcd
" ("abcdingrave
"), имеет только 12, хотя для длины 4 "abcd
" - это оптимальный.
Это интересная проблема, хотя, я думаю, вам нужно построить автомат, который ищет текст для ваших слов, и вам нужно найти путь в этом автомате заданной длины, который проходит через «самые сладкие» состояния (например, через государства, которые дают больше конфет взамен). Я буду рассматривать это дальше.
ОБНОВЛЕНИЕ: должно работать так:
- Создание DFA из алгоритма поиска текста Aho-Corasick
- Поиск обхода (не пути, т. Е. Вы разрешаете повторные ребра и вершины) заданной длины с максимальным усилением, начиная с начального состояния DFA. Вы можете сделать это с помощью динамического программирования (строить более длинные прогулки из более коротких на 1 символ).