给定两个单词(beginWord 和 endWord)和一个字典 wordList,找出所有从 beginWord 到 endWord 的最短转换序列。转换需遵循如下规则:

每次转换只能改变一个字母。
转换过程中的中间单词必须是字典中的单词。
说明:

如果不存在这样的转换序列,返回一个空列表。
所有单词具有相同的长度。
所有单词只由小写字母组成。
字典中不存在重复的单词。
你可以假设 beginWord 和 endWord 是非空的,且二者不相同。
示例 1:

输入:
beginWord = “hit”,
endWord = “cog”,
wordList = [“hot”,“dot”,“dog”,“lot”,“log”,“cog”]

输出:
[
[“hit”,“hot”,“dot”,“dog”,“cog”],
[“hit”,“hot”,“lot”,“log”,“cog”]
]
示例 2:

输入:
beginWord = “hit”
endWord = “cog”
wordList = [“hot”,“dot”,“dog”,“lot”,“log”]

输出: []

解释: endWord “cog” 不在字典中,所以不存在符合要求的转换序列。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/word-ladder-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路:BFS

class Solution {public List<List<String>> findLadders(String beginWord, String endWord, List<String> wordList) {List<List<String>> ans=new ArrayList<List<String>>();//存答案List<List<Integer>> mp=new ArrayList<List<Integer>>();//存图List<List<Integer>> pre=new ArrayList<List<Integer>>();//存前驱int end=-1;//找endWord的位置for(int i=0;i<wordList.size();i++){if(wordList.get(i).equals(endWord)){end=i;break;}}if(end==-1) return ans;for(int i=0;i<wordList.size()+1;i++){mp.add(new LinkedList<Integer>());pre.add(new ArrayList<Integer>());}for(int i=0;i<wordList.size();i++){//单词表内建图for(int j=i+1;j<wordList.size();j++){if(judge(wordList,i,j)){mp.get(i).add(j);mp.get(j).add(i);}}}wordList.add(beginWord);//起点建图int begin=wordList.size()-1;for(int i=0;i<wordList.size()-1;i++){if(judge(wordList,begin,i)){mp.get(begin).add(i);}}int[] step=new int[wordList.size()];Queue<Integer> q=new LinkedList<Integer>();q.offer(begin);step[begin]=1;while(!q.isEmpty()){int u=q.poll();if(u==end){solve(end,begin,new LinkedList<String>(),pre,wordList,ans);break;}for(int i=0;i<mp.get(u).size();i++){int v=mp.get(u).get(i);if(step[v]==0){pre.get(v).add(u);q.offer(v);step[v]=step[u]+1;}else if(step[v]==step[u]+1){pre.get(v).add(u);}}}return ans;}public boolean judge(List<String> wordList,int a,int b){String sa=wordList.get(a);String sb=wordList.get(b);int cnt=0;for(int i=0;i<sa.length();i++){if(sa.charAt(i)!=sb.charAt(i)){cnt++;if(cnt>1) return false;}}return true;}public void solve(int now,int begin,LinkedList<String> road,List<List<Integer>> pre,List<String> wordList,List<List<String>> ans){road.addFirst(wordList.get(now));if(now==begin){ans.add(new LinkedList<String>(road));road.removeFirst();return ;}for(int i=0;i<pre.get(now).size();i++){int to=pre.get(now).get(i);solve(to,begin,road,pre,wordList,ans);}road.removeFirst();return ;}
}

126. 单词接龙 II相关推荐

  1. Leetcode.126 单词接龙 II

    题目链接 Leetcode.126 单词接龙 II 题目描述 按字典 wordList完成从单词 beginWord到单词 endWord转化,一个表示此过程的 转换序列 是形式上像 beginWor ...

  2. LeetCode 126. 单词接龙 II(图的BFS)

    1. 题目 给定两个单词(beginWord 和 endWord)和一个字典 wordList,找出所有从 beginWord 到 endWord 的最短转换序列. 转换需遵循如下规则: 每次转换只能 ...

  3. leetcode 126. 单词接龙 II

    leetcode 126题 介绍 方法一 代码 Solution.java Test.java 方法二 算法介绍 在这个过程中需要注意的问题 代码 Solution.java Test.java 介绍 ...

  4. LeetCode 126 单词接龙 II

    题目描述 给定两个单词(beginWord 和 endWord)和一个字典 wordList,找出所有从 beginWord 到 endWord 的最短转换序列.转换需遵循如下规则:每次转换只能改变一 ...

  5. LeetCode——126. 单词接龙 II

    概述 题目地址 题目不难理解,这里不需要额外解释 思路 首先 题目要求寻找最短转换序列,那么我们容易想到使用BFS BFS思路这里不再介绍 沿着BFS考虑代码编写,问题在于如何正确保存获取目标单词的路 ...

  6. 2021-06-14(126. 单词接龙 II)

    class Solution {public List<List<String>> findLadders(String beginWord, String endWord, ...

  7. 【每日刷题】单词接龙II

    题目地址 https://leetcode-cn.com/problems/word-ladder-ii/ 题目描述:单词接龙II 给定两个单词(beginWord 和 endWord)和一个字典 w ...

  8. 【数据结构与算法】之深入解析“单词接龙II”的求解思路与算法示例

    一.题目要求 按字典 wordList 完成从单词 beginWord 到单词 endWord 转化,一个表示此过程的转换序列是形式上像 beginWord -> s1 -> s2 -&g ...

  9. lintcode 单词接龙II

    题意 给出两个单词(start和end)和一个字典,找出所有从start到end的最短转换序列 比如: 1.每次只能改变一个字母. 2.变换过程中的中间单词必须在字典中出现. 注意事项 所有单词具有相 ...

最新文章

  1. RASPBERRY PI PICO 树莓派PICO开发板双核高性能低功耗RP2040芯片
  2. 为什么说python是世界上最好的语言-Python是世界上最好的语言 吗?
  3. Netflix Curator 使用 Zookeeper 编程
  4. java new url 带密码_获取密码重置URL
  5. 翻译:打造Edge渲染内核的浏览器
  6. matlab中“存储空间不足,无法处理此命令”
  7. 元件库导入_最新版字体图标元件库分享,一套绝佳的矢量字体图标元件库
  8. 关于MPLS静态 LSP建立的问题——针对上题的另一种解法
  9. winform对话框控件、打印控件
  10. completion time, flow time和processing time 区别
  11. mysql配置文件(完整版)
  12. 淘宝卖家过劳死VS跳楼死
  13. 计算机组装方案背景图,白色系主机的另外一种搭配:联力O11MINI装机作业参考...
  14. 羽毛球的主要击球技术
  15. 解决ViVO 手机安装APP失败问题
  16. Shell 遍历数组的方法
  17. lnk1120如何解决_fatal error LNK1120: 6 unresolved externals问题怎么解决?
  18. 计算机网络笔记及思维导图(1)——概述
  19. 亚马逊云科技中国峰会,一起探路未来
  20. 云终端和瘦客户机的区别

热门文章

  1. HDU6656 2019 Multi-University Training Contest 7
  2. python中用什么函数读取字符串_Python(2)字符串的主要方法
  3. SPOJ 10628 Count on a tree 主席树 附数据生成器
  4. 34所自划线院校研究生奖助学金一览!
  5. 心灵奇旅中不认识的单词和句子
  6. 电子科大和北邮计算机,同为IT名校,北京邮电大学和电子科技大学谁更胜一筹?...
  7. 安装深度linux系统卡住不动,Linux安装系统卡住
  8. 21 07 13学习总结
  9. mysql导入报1449_mysqldump 1449错误解决办法
  10. eps文件_如何编辑eps文件?