Word Ladder I & II
public class Solution {
public int ladderLength(String beginWord, String endWord, Set<String> wordList) {
if(beginWord.length() != endWord.length()) return 0;
if(wordList == null || wordList.size() == 0) return 0;
if(beginWord.equals(endWord)) return 2;
HashSet<String> beginSet = new HashSet<String>();
HashSet<String> endSet = new HashSet<String>();
beginSet.add(beginWord);
endSet.add(endWord);
wordList.remove(beginWord);
wordList.remove(endWord);
return bfs(2, beginSet, endSet, wordList);
}
private int bfs(int steps, Set<String> beginSet, Set<String> endSet, Set<String> wordSet){
HashSet<String> nextLevel = new HashSet<String>();
for(String beginWord : beginSet){
char[] charArray = beginWord.toCharArray();
for(int pos = 0; pos < charArray.length; pos++){
for(char chr = 'a'; chr <= 'z'; chr++){
charArray[pos] = chr;
String str = String.valueOf(charArray);
if(endSet.contains(str)) return steps;
if(wordSet.contains(str)){
nextLevel.add(str);
wordSet.remove(str);
}
}
charArray = beginWord.toCharArray();
}
}
if(nextLevel.size() == 0) return 0;
if(endSet.size() < nextLevel.size()){
return bfs(steps + 1, endSet, nextLevel, wordSet);
} else {
return bfs(steps + 1, nextLevel, endSet, wordSet);
}
}
}有向图找最短距离用 BFS
有向图返回所有路径用 DFS
HashMap 中 value 是 List 可以直接map.get(key).add(value);
Last updated