127. Word Ladder
Problem description:
Given two words (beginWord and endWord), and a dictionary’s word list, find the length of shortest transformation sequence from beginWord to endWord, such that:
Only one letter can be changed at a time.
Each transformed word must exist in the word list. Note that beginWord is not a transformed word.
Note:
Return 0 if there is no such transformation sequence.
All words have the same length.
All words contain only lowercase alphabetic characters.
You may assume no duplicates in the word list.
You may assume beginWord and endWord are non-empty and are not the same.
Example 1:
Input:
beginWord = “hit”,
endWord = “cog”,
wordList = ["hot","dot","dog","lot","log","cog"]
Output: 5
Explanation: As one shortest transformation is "hit" -> "hot" -> "dot" -> "dog" -> "cog"
,
return its length 5.
Example 2:
Input:
beginWord = “hit”
endWord = “cog”
wordList = ["hot","dot","dog","lot","log"]
Output: 0
Explanation: The endWord “cog” is not in wordList, therefore no possible transformation.
Solution:
The key idea is to substitute every single character in the beginWord
and check whether if there’s any match in the wordList
. One thing you need to notice is that you can not use a word twice; therefore, once a word in wordList
is used(used means we can find a match after replacing the character), you need to remove it from the list.
Put wordList in set(), remove word if it’s used.
BFS to find if a word exist, newWord is newWord = word[:i] + c + word[i+1:]
1 | class Solution: |
1 | class Solution { |