Программа написана на С++. В данной программе используется 3 класса:
- Commander отвечает за работу с вводом-выводом и содержит в себе экземпляр класса Trie
- Trie является ядром программы. Этот клаасс содержит в себе префиксное дерево отвечает за нахождение подсказки. В конструкторе он принимает массив строк, которые и надо добавить в префиксное дерево с учетом их весов (в данном случае это количество входов данное слово в массив, переданный в конструктор). Ускорение работы с запросами, которые являются продолжением предыдущего запроса можно осуществить за счет того, что работа происходит в дереве и сохраняется позиция в дереве в предыдущем запросе. Достаточно за линию понять является ли новый запрос продолжением старого и в этом случае поиск в дереве начинается с сохраненного места.
- Node вспомогательный класс для работы с нодами дерева в Trie
Данная программа работает с английскими буквами - source.cpp
В качестве улучшения программы можно было бы улучшить класс Commander и давать подсказки по мере ввода. Для того, чтобы избежать слишком частого вызова FindHint можно использовать декоратор с debounce с константным временем задержки (например, 500мс).