Given two words (start and end), and a dictionary, find the length of the shortest transformation sequence from start to end, such that:
Only one letter can be changed at a time Each intermediate word must exist in the dictionary
For example,
Given:
start = “hit”
end = “cog”
dict = [“hot”,”dot”,”dog”,”lot”,”log”]
As one shortest transformation is “hit” ->”hot” ->”dot” ->”dog” ->”cog”, the program should return its length 5.
Note: Return 0 if there is no such transformation sequence. All words have the same length. All words contain only lowercase alphabetic characters.
Ladder Length in Java
public int ladderLength(String start, String end, HashSet<String> dict) { if (dict.size() == 0) return 0; dict.add(end); LinkedList<String> wordQueue = new LinkedList<String>(); LinkedList<Integer> distanceQueue = new LinkedList<Integer>(); wordQueue.add(start); distanceQueue.add(1); //track the shortest path int result = Integer.MAX_VALUE; while (!wordQueue.isEmpty()) { String currWord = wordQueue.pop(); Integer currDistance = distanceQueue.pop(); if (currWord.equals(end)) { result = Math.min(result, currDistance); } for (int i = 0; i < currWord.length(); i++) { char[] currCharArr = currWord.toCharArray(); for (char c = ’a’; c <= ’z’; c++) { currCharArr[i] = c; String newWord = new String(currCharArr); if (dict.contains(newWord)) { wordQueue.add(newWord); distanceQueue.add(currDistance + 1); dict.remove(newWord); } } } } if (result < Integer.MAX_VALUE) return result; else return 0; }
What do we learn from this Ladder Length Problem?
• Use breadth-first or depth-first search to solve problems
• Use two queues, one for words and another for counting