Я бы, наверное, сделал это, начав со словаря, затем (для каждого слова) вставил слово в список, набранный числами, которые могли бы образовать слово.
Тогда вам, вероятно, нужно будет каким-то образом отсортировать получающиеся списки, чтобы более вероятные слова появлялись перед менее вероятными словами (если у вас есть пробел, я бы также включил небольшую область для счетчика, чтобы мы могли постепенно сортируйте эти ИЛИ, просто перемещая последний использованный символ в начало списка предложений, поэтому мы со временем стремимся дать пользователю лучший ответ).
Таким образом, когда у вас есть 4663 в качестве ввода, вы можете довольно просто получить соответствующий связанный список с примерно O (1) поиском в хеш-таблице.