Je commencerais probablement par un dictionnaire, puis (pour chaque mot) j'ajouterais le mot à une liste contenant les chiffres qui peuvent former le mot.
Ensuite, vous devrez probablement trier les listes résultantes d'une manière ou d'une autre, de façon à ce que les mots les plus probables apparaissent avant les mots les moins probables (si vous avez la place, j'inclurais également une petite zone pour un compteur, de façon à ce que nous puissions re-trier ces listes de manière incrémentale OU simplement déplacer le dernier mot utilisé vers le début de la liste de suggestions, de façon à ce que nous ayons tendance, au fil du temps, à donner une meilleure réponse à l'utilisateur).
De cette façon, lorsque vous avez 4663 comme entrée, vous pouvez tout simplement récupérer la liste liée pertinente avec une consultation de table de hachage d'environ O(1).