单词接龙(BFS+剪枝)
单词接龙
题目:单词接龙
给你两个单词 beginWord 和 endWord 和一个字典 wordList ,找到从 beginWord 到 endWord 的最短转换序列中的单词数目,转换规则如下:
每次转换只能改变一个字母。
转换过程中的中间单词必须是字典 wordList 中的单词。
如果不存在这样的转换序列,返回 0。
输入:beginWord = "hit", endWord = "cog", wordList = ["hot","dot","dog","lot","log","cog"]
输出:5
解释:一个最短转换序列是 "hit" -> "hot" -> "dot" -> "dog" -> "cog", 返回它的长度 5。
题解
从beginWord开始,依次遍历符合要求的字符,直到找到结果为止。
代码:
class Solution {
public boolean isSimilar(String temp, String str) {
if (temp.length() != str.length())
return false;
int sum = 0;
for (int i = 0; i < temp.length(); i++) {
if (temp.charAt(i) != str.charAt(i))
sum++;
if (sum > 1) return false;
}
return true;
}
public int ladderLength(String beginWord, String endWord, List<String> wordList) {
Queue<String> queue = new ArrayDeque<>();
queue.add(beginWord);
Set<String> set = new HashSet<>();
int res = 1;
while (!queue.isEmpty() && set.size() != wordList.size()) {
res += 1;
int l = queue.size();
for (int i = 0; i < l; i++) {
String temp = queue.poll();
for (String str : wordList) {
if (!set.contains(str) && isSimilar(temp, str)) {
if (str.equals(endWord))
return res;
set.add(str);
queue.add(str);
}
}
}
}
return 0;
}
}