5454. Лестница слов

Hard 2 решили
Даны начальное слово beginWord, конечное endWord и словарь wordList. Нужно превратить начало в конец цепочкой слов.

За один шаг меняется ровно одна буква — две сразу нельзя. Каждое следующее слово, включая конечное, обязано лежать в wordList. Само beginWord в словарь класть не обязательно.

Если endWord в словаре нет, «допрыгнуть» до него с последнего промежуточного слова нельзя: верните 0.

Верните длину кратчайшей цепочки — число слов в ней, считая оба конца (замен на один меньше). Нет пути — 0. Если начало уже совпадает с концом и конец есть в словаре — 1.
beginWord = hit,  endWord = cog
соседи — слова, отличающиеся ровно одной буквой:

  hit — hot
  hot — dot, lot
  dot — dog, lot
  lot — log, dot
  dog — log, cog
  log — dog, cog

пример 1, cog есть в словаре:
  hit → hot → dot → dog → cog     5 слов
  hit → hot → lot → log → cog     тоже 5
  короче нельзя                     ответ 5

пример 2, тот же граф, но cog убрали из словаря:
  hit → hot → dot → dog            дойти можно
  hit → hot → lot → log            тоже
  из dog одна буква до cog, из log тоже,
  но шагать разрешено только в слово из wordList,
  а cog там нет. Конечное слово само по себе
  пропуск в словарь не даёт. Дальше некуда → 0

Примеры:

Вход: {"beginWord": "hit", "endWord": "cog", "wordList": ["hot", "dot", "dog", "lot", "log", "cog"]}
Выход: 5
Объяснение: cog есть в словаре. Одна из кратчайших цепочек: hit → hot → dot → dog → cog. В ней 5 слов (4 замены). hit → hot → lot → log → cog тоже длины 5. Короче пути нет → 5.
Вход: {"beginWord": "hit", "endWord": "cog", "wordList": ["hot", "dot", "dog", "lot", "log"]}
Выход: 0
Объяснение: Старт и финиш те же, и до dog или log дойти можно: hit → hot → dot → dog. Из dog (и из log) одна буква до cog — кажется, что последний шаг очевиден. Но cog нет в wordList, а без словаря этот шаг запрещён: конечное слово не открывает исключение. Застряли на dog/log → 0.
Вход: {"beginWord": "a", "endWord": "c", "wordList": ["a", "b", "c"]}
Выход: 2
Объяснение: a и c отличаются одной буквой, c есть в словаре. Цепочка a → c — это уже 2 слова. Через b длиннее, её не берём → 2.

Ограничения:

1 <= beginWord.length <= 10 beginWord, endWord и все слова словаря одной длины 1 <= wordList.length <= 5000 только строчные латинские буквы a–z

Теги:

Строки Графы Поиск в ширину

Комментарии (0)

Зарегистрируйтесь или войдите, чтобы оставить комментарий

Пока нет комментариев. Будьте первым!