Ввод: текст T и набор из n слов в конечном алфавите.
Нам нужно найти самое длинное представление слов, которые при объединении составляют T. Это можно сделать путем объединения слов вместе.
- Не может быть такого представления
- Мы можем использовать одно и то же слово из словаря более одного раза
- Решение должно быть оптимальным
- Нет ограничений на длину вывода
Например, учитывая вывод:
words = {"na", "ba", "banana", "bana" , "a", "nan"}
T = "банан"
Вывод должен быть "ba" "nan" "a", потому что количество слов равно 3. "bana" «na» и «банан» состоят из 2 и 1 слова / с соответственно, поэтому это не максимальное количество слов, и результат должен быть «ba» «nan» «a».
У меня есть пытался решить это с жадным алгоритмом, но он не работает. Итак, я думаю, что решение - это динамическое программирование c, но я не знаю как. Я попробовал другой подход, чтобы сделать это с Tr ie - путем поиска текущей буквы в вершинах tr ie.
- Поиск первой буквы T в Tr ie
- Проверьте другие буквы в вершине, если T не единственная буква в вершине
- Если T является единственной буквой в вершине, проверьте ее дочерние элементы
- Если дети не совпадают с i-й буквой T, снова найдите i-ую букву в Tr ie
- Если буквы на текущей вершине не совпадают, то такого нет репрезентация.
Это оптимальное или даже правильное решение? Если нет, то каково решение для динамического программирования c?
Заранее спасибо!