leetcode 127. 单词接龙(bfs)
给定两个单词(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)相关推荐
- LeetCode 127. 单词接龙(图的BFS/双向BFS)
文章目录 1. 题目 2. 图的BFS解题 2.1 单向BFS 2.2 双向BFS !厉害了 1. 题目 给定两个单词(beginWord 和 endWord)和一个字典,找到从 beginWord ...
- Java实现 LeetCode 127 单词接龙
127. 单词接龙 给定两个单词(beginWord 和 endWord)和一个字典,找到从 beginWord 到 endWord 的最短转换序列的长度.转换需遵循如下规则: 每次转换只能改变一个字 ...
- LeetCode 127. 单词接龙(C++)*
思路: 1.如果采用回溯法来的话会超时: 2.这里采用构造图和广度优先遍历结合来实现:首先要构造图,需要将每个字符串对应一个数字id,然后边的构造使用矩阵来实现,这里采用将每一个字符串的id连接每个将 ...
- LeetCode 127. 单词接龙(广度优先遍历)
题目描述 给定两个单词(beginWord 和 endWord)和一个字典,找到从 beginWord 到 endWord 的最短转换序列的长度.转换需遵循如下规则: 每次转换只能改变一个字母. 转换 ...
- leetcode 127 单词接龙
给定两个单词(beginWord 和 endWord)和一个字典,找到从 beginWord 到 endWord 的最短转换序列的长度.转换需遵循如下规则: 每次转换只能改变一个字母. 转换过程中的中 ...
- Leetcode 127. 单词接龙 解题思路及C++实现
解题思路: 首先判断wordList中是否有endWord,如果没有,就返回0. pathCount用来存储beginWord转换到某一个word所需的长度,有点类似于动态规划中用于记录状态的矩阵. ...
- leetcode 127 单词接龙
思路:BST 方向 :{a,b,c.......z} 设置一个queue ,记录当前位置 先是外层循环(queue != null) 如果 这个循环走完, 说明中间没返回, 直接返回0: 每一次 ...
- LeetCode 126. 单词接龙 II(图的BFS)
1. 题目 给定两个单词(beginWord 和 endWord)和一个字典 wordList,找出所有从 beginWord 到 endWord 的最短转换序列. 转换需遵循如下规则: 每次转换只能 ...
- LeetCode:127 单词接龙 无向图BFS
LeetCode:127 单词接龙 无向图BFS 给定两个单词(beginWord 和 endWord)和一个字典,找到从 beginWord 到 endWord 的最短转换序列的长度.转换需遵循如下 ...
最新文章
- ListView之SimpleAdapter的使用
- wxWidgets:wxList< T >类模板的用法
- 2016/8/18 Linux常用命令 :目录、文件处理命令
- 算术运算符_四则与取模运算
- .net 实时通信_基于 RabbitMQ 的实时消息推送
- eclipse使用技巧_有效使用Eclipse的热门技巧
- 日志收集十大技术细节
- maven创建父项目和子项目
- java 模块化基础
- java bean状态_无状态和有状态的企业Java Bean
- php的命名空间实例
- ArcGIS求局部空间自相关
- 08-A. 旅馆顾客统计(静态成员)
- 【C语言】用C语言输出菱形
- PS虚化背景突出主体
- 小树corexy改voron装前必看
- 恐龙灭绝的真正原因是什么?撞击事件和火山喷发
- 哇!协议和算法竟然不是一回事!千万别再说错了!
- Decision-making Strategy on Highway for Autonomous Vehicles using Deep Reinforcement Learning
- springboot操作ES之ElasticSearch_EasyEs