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

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

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

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

输出: 5

解释: 一个最短转换序列是 “hit” -> “hot” -> “dot” -> “dog” -> “cog”,
返回它的长度 5。

代码

class Solution {public int ladderLength(String beginWord, String endWord, List<String> wordList) {Map<String ,Set<String>> set=new HashMap<>();for(int i=0;i<wordList.size();i++)set.put(wordList.get(i),new HashSet<>());for(int i=0;i<wordList.size();i++)//为每个单词构建可到达的单词的set{for(int j=i+1;j<wordList.size();j++){if(getDif(wordList.get(i),wordList.get(j))==1){set.get(wordList.get(i)).add(wordList.get(j));set.get(wordList.get(j)).add(wordList.get(i));}}}if(!set.containsKey(endWord)) return 0;Queue<String> queue=new LinkedList<>();Set<String> c=new HashSet<>();for(int i=0;i<wordList.size();i++) if(getDif(wordList.get(i),beginWord)==1)//将开始字符串可到达的字符串入队{queue.add(wordList.get(i));c.add(wordList.get(i));}if(queue.isEmpty()) return 0;int res=1;while (!queue.isEmpty())//bfs{int size=queue.size();res++;for (int i=0;i<size;i++){String temp=queue.poll();if(temp.equals(endWord)) return res;for(String s:set.get(temp)){if(!c.contains(s)){queue.add(s);c.add(s);}}}}return 0;}public int getDif(String s1, String s2) {///检查单词字母相异的个数int ret=0;for(int i=0;i<s1.length();i++){if(s1.charAt(i)!=s2.charAt(i)) ret++;}return ret;}
}

leetcode 127. 单词接龙(bfs)相关推荐

  1. LeetCode 127. 单词接龙(图的BFS/双向BFS)

    文章目录 1. 题目 2. 图的BFS解题 2.1 单向BFS 2.2 双向BFS !厉害了 1. 题目 给定两个单词(beginWord 和 endWord)和一个字典,找到从 beginWord ...

  2. Java实现 LeetCode 127 单词接龙

    127. 单词接龙 给定两个单词(beginWord 和 endWord)和一个字典,找到从 beginWord 到 endWord 的最短转换序列的长度.转换需遵循如下规则: 每次转换只能改变一个字 ...

  3. LeetCode 127. 单词接龙(C++)*

    思路: 1.如果采用回溯法来的话会超时: 2.这里采用构造图和广度优先遍历结合来实现:首先要构造图,需要将每个字符串对应一个数字id,然后边的构造使用矩阵来实现,这里采用将每一个字符串的id连接每个将 ...

  4. LeetCode 127. 单词接龙(广度优先遍历)

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

  5. leetcode 127 单词接龙

    给定两个单词(beginWord 和 endWord)和一个字典,找到从 beginWord 到 endWord 的最短转换序列的长度.转换需遵循如下规则: 每次转换只能改变一个字母. 转换过程中的中 ...

  6. Leetcode 127. 单词接龙 解题思路及C++实现

    解题思路: 首先判断wordList中是否有endWord,如果没有,就返回0. pathCount用来存储beginWord转换到某一个word所需的长度,有点类似于动态规划中用于记录状态的矩阵. ...

  7. leetcode 127 单词接龙

    思路:BST 方向 :{a,b,c.......z} 设置一个queue ,记录当前位置 先是外层循环(queue !=  null)   如果 这个循环走完, 说明中间没返回, 直接返回0: 每一次 ...

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

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

  9. LeetCode:127 单词接龙 无向图BFS

    LeetCode:127 单词接龙 无向图BFS 给定两个单词(beginWord 和 endWord)和一个字典,找到从 beginWord 到 endWord 的最短转换序列的长度.转换需遵循如下 ...

最新文章

  1. ListView之SimpleAdapter的使用
  2. wxWidgets:wxList< T >类模板的用法
  3. 2016/8/18 Linux常用命令 :目录、文件处理命令
  4. 算术运算符_四则与取模运算
  5. .net 实时通信_基于 RabbitMQ 的实时消息推送
  6. eclipse使用技巧_有效使用Eclipse的热门技巧
  7. 日志收集十大技术细节
  8. maven创建父项目和子项目
  9. java 模块化基础
  10. java bean状态_无状态和有状态的企业Java Bean
  11. php的命名空间实例
  12. ArcGIS求局部空间自相关
  13. 08-A. 旅馆顾客统计(静态成员)
  14. 【C语言】用C语言输出菱形
  15. PS虚化背景突出主体
  16. 小树corexy改voron装前必看
  17. 恐龙灭绝的真正原因是什么?撞击事件和火山喷发
  18. 哇!协议和算法竟然不是一回事!千万别再说错了!
  19. Decision-making Strategy on Highway for Autonomous Vehicles using Deep Reinforcement Learning
  20. springboot操作ES之ElasticSearch_EasyEs

热门文章

  1. 【汇编语言】8086汇编的loop循环与[bx]寻址(王爽第五章5.5节学习笔记)
  2. linux ethtool 查看网卡状态
  3. gcc的警告提示信息
  4. java接口作用和好处,持续更新大厂面试笔试题
  5. 安卓开发必须会的技能!浅谈Android消息机制原理,威力加强版
  6. 面试字节跳动Android工程师该怎么准备?深度解析,值得收藏
  7. hdu5692 Snacks dfs序+线段树
  8. 杜教筛--51nod1239 欧拉函数之和
  9. 【JAVA并发编程实战】3、同步容器
  10. WordPress 博客文章时间格式the_time()设置