题目地址(127. 单词接龙)
Posted 潜行前行
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了题目地址(127. 单词接龙)相关的知识,希望对你有一定的参考价值。
题目地址(127. 单词接龙)
https://leetcode.cn/problems/word-ladder/
题目描述
字典 wordList 中从单词 beginWord 和 endWord 的 转换序列 是一个按下述规格形成的序列 beginWord -> s1 -> s2 -> ... -> sk:
每一对相邻的单词只差一个字母。
对于 1 <= i <= k 时,每个 si 都在 wordList 中。注意, beginWord 不需要在 wordList 中。
sk == endWord
给你两个单词 beginWord 和 endWord 和一个字典 wordList ,返回 从 beginWord 到 endWord 的 最短转换序列 中的 单词数目 。如果不存在这样的转换序列,返回 0 。
示例 1:
输入:beginWord = "hit", endWord = "cog", wordList = ["hot","dot","dog","lot","log","cog"]
输出:5
解释:一个最短转换序列是 "hit" -> "hot" -> "dot" -> "dog" -> "cog", 返回它的长度 5。
示例 2:
输入:beginWord = "hit", endWord = "cog", wordList = ["hot","dot","dog","lot","log"]
输出:0
解释:endWord "cog" 不在字典中,所以无法进行转换。
提示:
1 <= beginWord.length <= 10
endWord.length == beginWord.length
1 <= wordList.length <= 5000
wordList[i].length == beginWord.length
beginWord、endWord 和 wordList[i] 由小写英文字母组成
beginWord != endWord
wordList 中的所有字符串 互不相同
关键点
- 深度遍历,加记忆化
代码
- 语言支持:Java
Java Code:
class Solution
public int ladderLength(String beginWord, String endWord, List<String> wordList)
int end = wordList.indexOf(endWord);
if(end==-1)
return 0;
wordList.add(beginWord);
int start = wordList.size()-1;
Queue<Integer> sQueue = new LinkedList<>();
Queue<Integer> eQueue = new LinkedList<>();
Set<Integer> sVisited = new HashSet<>();
Set<Integer> eVisited = new HashSet<>();
sVisited.add(start);
sQueue.add(start);
eVisited.add(end);
eQueue.add(end);
int count = 0;
while(!sQueue.isEmpty() && !eQueue.isEmpty() )
if(sQueue.size() > eQueue.size() )
Queue<Integer> t = sQueue;
sQueue = eQueue;
eQueue = t;
Set<Integer> s = sVisited;
sVisited = eVisited;
eVisited = s;
int size = sQueue.size();
count++;
while(size-- > 0)
String str = wordList.get(sQueue.poll());
for(int i=0;i<wordList.size();i++)
if(sVisited.contains(i)) continue;
if(!canChange(str,wordList.get(i))) continue;
if(eVisited.contains(i)) return count+1; // 需要进行最后一次转换
sVisited.add(i);
sQueue.add(i);
return 0;
public boolean canChange(String s,String p)
int count = 0;
if(s.length() == p.length())
for(int i=0;i<s.length();i++)
if(s.charAt(i) != p.charAt(i))
if(++count > 1) return false;
return count == 1;
以上是关于题目地址(127. 单词接龙)的主要内容,如果未能解决你的问题,请参考以下文章