Leetcode(127):
Input: beginWord = "hit", endWord = "cog", wordList = ["hot","dot","dog","lot","log","cog"] Output: 5 Explanation: As one shortest transformation is "hit" -> "hot" -> "dot" -> "dog" -> "cog", return its length 5.思路与最少完全平方数和相同。构造图,可以改变某一字符到达就是一条路径。但这种解法超时了。。。
class Solution {
public int ladderLength(String beginWord, String endWord, List<String> wordList) {
// 与最小完全平方数和思路一样,借助构造图,求最小路径
Queue<String> queue = new LinkedList<String>();
HashSet<String> set = new HashSet<String>();
int level = 1;
queue.offer(beginWord);
while (!queue.isEmpty()) {
int size = queue.size();
// System.out.println(size);
level++;
for (int j = 0; j < size; j++) {
String str = queue.poll();
if (set.add(str)) {
for (int i = 0; i < str.length(); i++) {
char[] chars = str.toCharArray();
for (char c = 'a'; c <= 'z'; c++) {
chars[i] = c;
String word = new String(chars);
if (wordList.contains(word)) {
if(word.equals(endWord)){
return level;
}else if(!set.contains(word)){
queue.offer(word);
}
}
}
}
}
}
// System.out.println("queueSize:"+queue.size());
}
return 0;
}
}