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