Word Ladder
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:
- 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(javascript)
const ladderLength = function (beginWord, endWord = '', wordList = []) {
const distance = (a = '', b = '') => {
let count = 0
for (let index = 0; index < b.length; index++) {
if (a[index] !== b[index]) {
count += 1
}
}
return count === 1
}
let current = [beginWord]
const visited = {
}
let count = 1
while (current.length > 0) {
const next = []
for (const word of current) {
if (word === endWord) {
return count
}
if (!visited[word]) {
next.push(...wordList.filter(word2 => distance(word, word2) && !visited[word2]))
}
visited[word] = true
}
count += 1
current = next
}
return 0
}