Вам дан пример строки «Iamastudent» без пробелов. Вам будет предоставлена предопределенная функция словаря, которая проверяет, присутствует ли данное слово в словаре или нет. Используя эту функцию, вы должны вставить пробелы в строку и напечатать ее как «Я студент».
это мой вопрос на собеседовании и сказал мне тоже решить в C ++, я решил с помощью динамического программирования, но он не был удовлетворен
решение, которое я дал,
так же, как в приведенном ниже вопросе
Данную фразу без пробелов добавить пробелы, чтобы сделать правильное предложение
он попросил меня сделать это с помощью Trie или же массив суффиксов но я не могу понять, может ли решение помочь мне
Найдите слова и поставьте после них пробелы
Ответ заключается в использовании структуры данных Trie. Создайте Trie с возможными словами и продолжайте обход. с Trie вы можете генерировать много разных возможных слов.
теперь здесь «iamastudent» с Trie вы можете генерировать эти слова.
i, a, am, a, as, student
теперь вы должны составить правильное предложение из этих слов. Здесь возможное решение — цепь Маркова. Цепочка Маркова — это структура данных, в которой хранится вероятность следующего слова после слова. так что цепочка марков будет.
"i" : [ "am", "did", "went" ...],
"a" : [ "tree", "dog" ..]
"am" : [ "a" ...]
Теперь вы эти много данных в последовательности
[i], [a, am], [a, as], [student]
Примечание: я сгруппировал все элементы, начинающиеся с одного символа, в один
список.
начать с «я»
Следующее слово «а». но в марковской цепочке «а» нет. так что перейдите к следующему слову. как это вы можете продолжить.
с этого момента это поиск в dfs правильного предложения. ну, это был хороший и сложный вопрос.
Если существует уникальное решение для разбиения предложения, то сделать это с помощью tree очень просто:
Вы закончили, когда в строке больше нет символов (вы можете проверить, что в этот момент вы не пересекаете дерево).
Если решение не уникально, тогда, когда вы достигнете конца строки и у вас нет метки или листа в дереве, вам необходимо вернуться к предыдущему пробелу, который вы испустили. Вам нужен стек для позиций во входной строке.