А как искать соседей на лету? Скажем у нас одно слово в начале списка, а другое в конце, и оба отличаются на один символ.
А точно так же, как и в buildGraph - его внутренним циклом. Вот, в чем вижу проблему:
["hot","dot","dog","lot","log","cog","aaa","bbb","zzz"]
{
hit: ['hot'],
hot: ['dot','lot'],
dot: ['dog','lot'],
dog: ['log','cog'],
lot: ['log'],
log: ['cog'],
aaa: [],
bbb: [],
zzz: [],
}
В buildGraph мы для aaa, bbb, zzz переберем все остальные слова, чтобы проверить нет ли у них соседей. В моём варианте мы их вообще трогать не будем. Начали с первого слова, прошлись циклом, получили hot. Дальше ищем соседей для hot и т.д. В итоге лишняя работа не будет произведена.