Word Ladder — BFS Shortest Transformation Path

Sanjeev SharmaSanjeev Sharma
2 min read

Advertisement

Problem 290 · Word Ladder

Difficulty: Medium · Pattern: BFS on Word Graph

Return the shortest transformation length from beginWord to endWord.

Solutions

# Python
from collections import deque
def ladderLength(beginWord, endWord, wordList):
    wordSet = set(wordList)
    if endWord not in wordSet: return 0
    queue = deque([(beginWord, 1)])
    visited = {beginWord}
    while queue:
        word, steps = queue.popleft()
        for i in range(len(word)):
            for c in 'abcdefghijklmnopqrstuvwxyz':
                new_word = word[:i] + c + word[i+1:]
                if new_word == endWord: return steps+1
                if new_word in wordSet and new_word not in visited:
                    visited.add(new_word)
                    queue.append((new_word, steps+1))
    return 0
// Java
public int ladderLength(String beginWord, String endWord, List<String> wordList) {
    Set<String> wordSet = new HashSet<>(wordList);
    if (!wordSet.contains(endWord)) return 0;
    Queue<String> q = new LinkedList<>(); q.offer(beginWord);
    Set<String> visited = new HashSet<>(); visited.add(beginWord);
    int steps = 1;
    while (!q.isEmpty()) {
        int size = q.size(); steps++;
        while (size-->0) {
            String word = q.poll(); char[] arr = word.toCharArray();
            for (int i=0;i<arr.length;i++) {
                char orig = arr[i];
                for (char c='a';c<='z';c++) {
                    arr[i]=c; String newW=new String(arr);
                    if (newW.equals(endWord)) return steps;
                    if (wordSet.contains(newW) && !visited.contains(newW)) {
                        visited.add(newW); q.offer(newW);
                    }
                }
                arr[i]=orig;
            }
        }
    }
    return 0;
}

Complexity

  • Time: O(M^2 * N) where M = word length, N = word list size
  • Space: O(M^2 * N)

Advertisement

Sanjeev Sharma

Written by

Sanjeev Sharma

Full Stack Engineer · E-mopro