class Solution {
public int ladderLength(String beginWord, String endWord, List<String> wordList) {
if(wordList == null || wordList.size() == 0){
return 0;
}
HashSet<String> wordSet = new HashSet<>();
for(String word : wordList){
wordSet.add(word);
}
//这里不能拒绝beginWord
if(!wordSet.contains(endWord)){
return 0;
}
int count = 1;//count值初始化为1
HashSet<String> visited = new HashSet<>();
Queue<String> queue = new LinkedList<>();
queue.offer(beginWord);
visited.add(beginWord);
while(!queue.isEmpty()){
//这里的size需要先固定住
int size = queue.size();
for(int i = 0; i < size; i++){
String temp = queue.poll();
char[] chars = temp.toCharArray();
for(int j = 0; j < chars.length; j++){
char oldChar = chars[j];
for(char c = 'a'; c <= 'z'; c++){
if(c == oldChar){
continue;
}
chars[j] = c;
String newString = new String(chars);
if(wordSet.contains(newString) && !visited.contains(newString)){
if(newString.equals(endWord)){
//直接返回下一层
return count + 1;
}
else{
queue.offer(newString);
visited.add(newString);
}
}
}
chars[j] = oldChar;
}
}
count ++;
}
return 0;
}
}