Вы можете создать вид дерева слов:
Вы можете пройти через строку без пробела. Как только вы найдете слово в своем списке, вы добавляете пробел и продолжаете ... пока не сможете идти дальше.
Затем вы возвращаетесь к предыдущему слову и пытаетесь найти, добавляя новые буквы, вы можете создать слова, и если вы можете продолжить их.
Вы пробуете это, пока не попробуете все возможности.
Если вы вернетесь к начальному слову и не найдете никакого решения => нет соль
Вот алгоритм (мой синтаксис псевдокода не очень хорош, но вы можете получить общее представление. Я думаю, вам придется его немного исправить):
TreeWordResult //Tree that keeps the results in memory
Go through the InputString:
If you find a word in the InputDictionnary
Then add this word to the last node of the treeWordResult
Otherwise:
while (No word found):
go back in the treeWordResult
try to find word in InputDictionnary different from the one before (on the other node)
endwhile
if no word found:
return NO SOLUTION
otherwise:
continue going through word
endif
endif
return Leaf
Алгоритм заканчивается, когда вы не находите золь или когда у вас "лист" (вы прошли всю строку)
Вот иллюстрация на вашем примере:
Надеюсь, мои объяснения понятны.