- 算法
- 1.BFS
- 2.每次把队列中的所有元素逐个出队,寻找他们可以转换的下一个字符串添加到队列
- 2.1 当遇到目标字符串时,结束BFS
- 2.2 当队列空时还没遇到目标字符串时,无法转换
- 2.3 寻找可以转换的下一个字符串的方法:常数时间复杂度,使用a-z逐个替换字符判断是否存在于wordList中并且没有访问过
public int ladderLength(String beginWord, String endWord, List<String> wordList) { HashSet<String> wordDict = new HashSet<>(wordList), visited = new HashSet<>(); Queue<String> queue = new LinkedList<>(); queue.offer(beginWord); for (int length = 1; !queue.isEmpty(); length++) { for (int i = queue.size(); i > 0; i--) { String curr = queue.poll(); if (curr.equals(endWord)) { return length; } for (int j = 0; j < curr.length(); j++) { char[] ch = curr.toCharArray(); for (char c = 'a'; c <= 'z'; c++) { if (ch[j] == c) { continue; } ch[j] = c; String temp = String.valueOf(ch); if (wordDict.contains(temp) && visited.add(temp)) { queue.offer(temp); } } } } } return 0; }