public class Solution {
public List<List<String>> findLadders(String beginWord, String endWord, Set<String> wordList) {
List<List<String>> res = new LinkedList<>();
Set<String> visited = new HashSet<>();
Set<String> unVisited = new HashSet<>();
Queue<WordNode> queue = new LinkedList<>();
queue.offer(new WordNode(beginWord, new LinkedList<>()));
unVisited.addAll(wordList);
unVisited.add(endWord);
//int prevSteps = 0;
int prevSteps = 1;
int min = Integer.MAX_VALUE;
while (!queue.isEmpty()) {
WordNode node = queue.poll();
int curSteps = node.getSteps();
String word = node.word;
if (word.equals(endWord)) {
if (curSteps > min) {
return res;
}
min = curSteps;
res.add(node.list);
}
if (curSteps > prevSteps) {
prevSteps = curSteps;
//unVisited.clear();
unVisited.removeAll(visited);
}
for (int i = 0; i < word.length(); i++) {
char[] chars = word.toCharArray();
for (char c = 'a'; c <= 'z'; c++) {
if (chars[i] == c) {
continue;
}
chars[i] = c;
String newWord = new String(chars);
if (unVisited.contains(newWord)) {
queue.offer(new WordNode(newWord, node.list));
visited.add(newWord);
}
}
}
}
return res;
}
private class WordNode {
List<String> list;
String word;
public WordNode (String word, List<String> list) {
this.word = word;
this.list = new LinkedList<>(list);
this.list.add(word);
}
public int getSteps() {
return list.size();
}
}
}
Word Ladder II
最新推荐文章于 2022-02-07 22:27:20 发布