• 算法
    • 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;
}