Word Ladder
class Solution {
public int ladderLength(String beginWord, String endWord, List<String> wordList) {
return bfs(beginWord, endWord, wordList);
}
List<String> getNextWord(String cur, Set
<String> wordList){
List<String> ret = new ArrayList<String>();
char[] cs = cur.toCharArray();
for(int i = 0; i < cur.length(); i ++){
for(char c = 'a' ; c <= 'z'; c ++){
if(cs[i] == c){
continue;
}
char temp = cs[i];
cs[i] = c;
String nw = new String(cs);
if(wordList.contains(nw)){
ret.add(nw);
}
cs[i] = temp;
}
}
return ret;
}
int bfs(String beginWord, String endWord, List<String> wordList){
Queue<String> q = new LinkedList<String>();
Set<String> set = new HashSet<String>();
//用set存字典,为了让查contains更快
Set<String> dict = new HashSet<>();
for (String word : wordList) {
dict.add(word);
}
q.add(beginWord);
//wordList.add(beginWord);
int level = 1;
while(!q.isEmpty()){
level ++;
int size = q.size();
for(int i = 0; i < size; i ++){
String cur = q.poll();
List<String> nextWords = getNextWord(cur, dict);
for(String s : nextWords){
if(set.contains(s))
continue;
if(endWord.equals(s)){
return level;
}
q.offer(s);
set.add(s);
}
}
}
return 0;
}
}Last updated