#求求给个说法啊
为什么它就运行不了呢?
题目
给定字典中的两个词,长度相等。写一个方法,把一个词转换成另一个词, 但是一次只能改变一个字符。每一步得到的新词都必须能在字典中找到。
编写一个程序,返回一个可能的转换序列。如有多个可能的转换序列,你可以返回任何一个。
示例 1:
输入:
beginWord = "hit",
endWord = "cog",
wordList = ["hot","dot","dog","lot","log","cog"]
输出:
["hit","hot","dot","lot","log","cog"]
示例 2:
输入:
beginWord = "hit"
endWord = "cog"
wordList = ["hot","dot","dog","lot","log"]
输出: []
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/word-transformer-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
代码
public List<String> findLadders(String beginWord, String endWord, List<String> wordList) {
Queue<String> queue = new LinkedList<>(); //用来走路的
Map<String,String> visited = new HashMap(); //可以保存走过的word,还有它的父节点
queue.add(beginWord); //开始遍历
Deque<String> list = new LinkedList<>(); //最后的返回值
visited.put(beginWord,beginWord);
while (!queue.isEmpty()){
int size = queue.size();//这次的父类有几个
for (int i = 0; i < size; i++){ //这波的父类遍历
String s = queue.poll();
if (s.equals(endWord)){ // successive match
list.addFirst(endWord); //from end to begin
String t = endWord;
while (!t.equals(beginWord)){
t = visited.get(endWord);
list.addFirst(t);
}
return (List<String>) list;
}
for (var n : wordList){ //not match, add child node
if (isadj(s,n) && !visited.containsKey(n)){//is adj and not have visit
visited.put(n,s);
queue.add(n);
}
}
}
}
return (List<String>)list;
}
boolean isadj(String s, String n){
int k = 0;
for (int i = 0; i < s.length(); i++)
if (s.charAt(i) != n.charAt(i))
k++;
return k == 1;
}