127. 单词接龙

给定两个单词(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。
示例 2:

输入:

beginWord = "hit"
endWord = "cog"
wordList = ["hot","dot","dog","lot","log"]

输出: 0

解释: endWord “cog” 不在字典中,所以无法进行转换。

class Solution {//递归public int ladderLength(String beginWord, String endWord, List<String> wordList) {if (wordList == null || wordList.size() == 0) return 0;//hashset的好处:去重也完成了//开始端HashSet<String> start = new HashSet<>();//结束端HashSet<String> end = new HashSet<>();//所有字符串的字典HashSet<String> dic = new HashSet<>(wordList);start.add(beginWord);end.add(endWord);if (!dic.contains(endWord)) return 0;//经历过上面的一系列判定,到这里的时候,若是有路径,则最小是2,所以以2开始return bfs(start, end, dic, 2);}public int bfs(HashSet<String> st, HashSet<String> ed, HashSet<String> dic, int l) {//双端查找的时候,若是有任意一段出现了“断裂”,也就是说明不存在能够连上的路径,则直接返回0if (st.size() == 0) return 0;if (st.size() > ed.size()) {//双端查找,为了优化时间,永远用少的去找多的,比如开始的时候塞进了1000个,而结尾只有3个,则肯定是从少的那一端开始走比较好return bfs(ed, st, dic, l);}//BFS的标记行为,即使用过的不重复使用dic.removeAll(st);//收集下一层临近点HashSet<String> next = new HashSet<>();for (String s : st) {char[] arr = s.toCharArray();for (int i = 0; i < arr.length; i++) {char tmp = arr[i];//变化for (char c = 'a'; c <= 'z'; c++) {if (tmp == c) continue;arr[i] = c;String nstr = new String(arr);if (dic.contains(nstr)) {if (ed.contains(nstr)) return l;else next.add(nstr);}}//复原arr[i] = tmp;}}return bfs(next, ed, dic, l + 1);}
}

Java实现 LeetCode 127 单词接龙相关推荐

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

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

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

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

  3. leetcode 127. 单词接龙(bfs)

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

  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. Debugging Tools for Windows__from WDK7
  2. SSL ×××的强劲发展势头似乎表明,它将取代IPSec ×××
  3. iOS-iOS9.Plist插入网络安全xml
  4. VALSE 2020-18 《如何写/审AI领域的论文》笔记
  5. 视音频数据处理入门:UDP-RTP协议解析
  6. C# 调用IP库(QQWry.Dat)查询IP位置及自动升级IP库方法(附IP库下载地址及相关dll下载)
  7. SCCM安装所需组件图
  8. Android开发笔记(七十一)区分开发模式和上线模式
  9. 《Ubuntu学习笔记》——如何建立软链接
  10. 弥合安全和开发间隙的四个关键点
  11. linux自动化安装集群,Redis自动化安装以及集群实现
  12. 浅谈5类过零检测电路
  13. 免费英文文献下载攻略
  14. 更改Android 默认键盘映射值
  15. 查询硬盘序列号的方法
  16. 秀米的对话框格子可以变大吗_如何使用秀米进行排版(对外版)课件.ppt
  17. 没想到 Python 中竟然还藏着这些稀奇古怪的东西...
  18. python查看list的shape_列表list、数组np.array等的len,size,shape操作
  19. 【金猿产品展】沃丰科技GaussMind——用技术提升客户体验
  20. 英文学习20180529

热门文章

  1. Python抓取视频内容
  2. linux发展史--Linux学习笔记(一)
  3. TMC5160/5130驱动芯片使用简明指南
  4. 机器学习(十五) - Bias vs. Variance
  5. 图像处理之LUT表的使用
  6. Urban Airship Android Client - Helium Push
  7. PHP链接ctp接口,CTP接口穿透式监管升级后对外接入地址变更,适用SIMNOW 模拟账户...
  8. 聊天机器人—简介(一)
  9. github开发人员在七夕搞事情:remote: Support for password authentication was removed on August 13, 2021.
  10. Android 获取视频宽高