См. Мой комментарий выше, но в любом случае несколько замечаний:
Вы выделяете 26 дочерних попыток немедленно, независимо от того, используются ли они. Вы могли бы создавать их лениво (то есть, только когда вы встречаете определенное письмо).
Ваш код будет работать только для простых букв ASCII и не обрабатывать иностранные символы, дефисы, апострофы или смешанный регистр. Ленивое распределение также поможет с этим.
Ваша реализация использует объект Trie на char
плюс несколько пустых резервных копий, поэтому, скорее всего, она будет весьма загруженной.
Возможно, будет лучше собирать результат в getString()
в правильном порядке, чем добавлять и затем реверсировать, но вам нужно сравнить это. Если вы отслеживаете глубину Trie, вы можете выделить массив правильной длины, а не StringBuilder, но отслеживание глубины требует своей собственной памяти.