这道题 采用BFS来解答。
每一层的结果入队,下一层再遍历每一个可能的所有的可能。
层层遍历,某层找到结果就可以直接返回,比起DFS 会更快!
写之前都是满头雾水,写完后 就发现无比优美 哈哈!
解题报告:
最直观的思路就是DFS,每次变成新的单词,同时从字典中删除新单词然后不断递归。
大数据时候超时。可以使用BFS,求出每次改变一个字母后在字典中存在的单词。之后逐层便利,和DFS不一样不一次走到最深。
思考一下DFS和BFS的区别,举个最简单的例子,111 -> 311。 
DFS的话,111->112,之后需要DFS 112的所有变形。同理111->113之后还要遍历113的所有变形。
而BFS的话,111->112 113 121 131 211 311只需要6次就能找到最终结果。
ref: http://www.qnwz.net/kaifa/166667.html
答案是参考九章算法解题站的,超级优美:
http://answer.ninechapter.com/solutions/word-ladder/
public class Solution {
public int ladderLength(String start, String end, Setdict) {
if (dict == null || dict.size() == 0) {
return 0;
}
HashSetdictH = new HashSet(dict);
Queueq = new LinkedList(); q.offer(start); dictH.remove(start); int len = 1; // q存放的是本层所有可能的string。例如111-> (112, 113, 131, 311),也就是说本层所有的变换 while (!q.isEmpty()) { int cnt = q.size(); for (int i = 0; i < cnt; i++) { // 取出队列中的每一个string,对它的所有的可能的变换进行一次bfs。 String s = q.poll(); // 某个string的每一个字符的每一个变换都要遍历. for (int j = 0; j < s.length(); j++) { for (char c = 'a'; c <= 'z'; c++) { if (c == s.charAt(j)) { // 不需要遍历它本身 continue; } String tmp = replace(s, j, c); if (tmp.equals(end)) { // 逐次遍历 在某层找到解就可以直接退出 return len + 1; } // 如果不是解,就先加入队列 ,准备下一层的遍历。 if (dictH.contains(tmp)) { dictH.remove(tmp); q.offer(tmp); } } } } len++; } return 0; } // replace the char in p to be c. public String replace(String s, int p, char c) { StringBuilder sb = new StringBuilder(s); sb.setCharAt(p, c); return sb.toString(); } } 

Word Ladder @LeetCode相关推荐

  1. 【难点+重点BFS】LeetCode 126. Word Ladder II

    LeetCode 126. Word Ladder II Solution1: 参考自花花酱:http://zxi.mytechroad.com/blog/searching/leetcode-126 ...

  2. 【重点BFS】LeetCode 127. Word Ladder

    LeetCode 127. Word Ladder Solution1:我的超过40%的AC的答案 原先利用BFS做但是内存溢出未能AC:进过修改加上了标记是否访问过的visited数组,可以AC啦~ ...

  3. LeetCode 127. Word Ladder

    原题链接在这里:https://leetcode.com/problems/word-ladder/ 题目: Given two words (beginWord and endWord), and ...

  4. Leetcode的word ladder问题

    127. Word Ladder 题意如下: 给定一个开始字符串和结束字符串以及含有大量字符串的字典,要求通过一定规则,能从开始字符串变换到结束字符串,求其最小变换字符串数目,该规则如下: 1 从开始 ...

  5. PHP第五周答案,算法设计与分析第五周作业——Word Ladder

    算法设计与分析第五周作业--Word Ladder 上周找了一道深度搜索优先搜索的算法题来做,于是这周就选了一道广度优先搜索算法题来试试手. 本周所选题目:原题目链接 题目详情 题目大意:给出一个字符 ...

  6. 算法细节系列(20):Word Ladder系列

    算法细节系列(20):Word Ladder系列 详细代码可以fork下Github上leetcode项目,不定期更新. 题目摘自leetcode: 1. Leetcode 127: Word Lad ...

  7. Word Ladder

    LeetCode[127. Word Ladder] 题解 难度[medium] 题目: Given two words (beginWord and endWord), and a dictiona ...

  8. 33 单词接龙(Word Ladder)

    文章目录 1 题目 2 解决方案 2.1 思路 2.2 图解 2.2 时间复杂度 2.3 空间复杂度 3 源码 1 题目 题目:单词接龙(Word Ladder) 描述:给出两个单词(start和en ...

  9. Word Ladder系列

    1.Word Ladder 问题描述: 给两个word(beginWord和endWord)和一个字典word list,找出从beginWord到endWord之间的长度最长的一个序列,条件: 1. ...

最新文章

  1. 软件工程需求设计说明书
  2. QIIME 2教程. 32如何写方法和引用Citing(2021.2)
  3. 掌握JAVA多线程的利器-线程池
  4. OSMboxPost()
  5. oracle备份恢复
  6. python 机器人开发库,如何为机器人框架创建自定义Python代码库
  7. C# Readonly和Const的区别
  8. 爬虫---如何抓取app的思路和方案
  9. 司空见惯 - 会议室名称
  10. Android 微信支付
  11. RobotStudio软件:ABB机器人弧焊焊接虚拟仿真实现方法
  12. 理财入门:企业分析(简述)
  13. sql 约束(sql server 环境)
  14. Unity 关于Spine不规则响应区域解决方法
  15. 小米运动改步数不同步的原因找到了,尽然是这问题
  16. a标签下载文件header中带上用于鉴权的token
  17. Response重定向
  18. python pandas库作用_python pandas库的一些使用总结
  19. IRIS(Incorporated Research Institutions for Seismology)常用功能介绍
  20. 关于SSL握手的错误解决

热门文章

  1. 在VMware虚拟机上使用网络测试命令找出虚拟机的IP地址
  2. 【答读者问13】backtrader实盘交易中应该注意些什么(数据篇)?
  3. SpringBoot项目生成二维码,再生成Excel文件导出,亲测采坑
  4. 分享一个在微信上捞几万块的操作
  5. 活动星投票优秀支书网络评选微信的投票方式线上免费投票
  6. 流量卡激活看快递:京东为快递激活,EMS/顺丰为自主激活。
  7. mysql怎么修改表的列名字_怎么修改mysql的表名和列名?
  8. 判断浏览器类型(附区分qq浏览器和chrome浏览器正则)
  9. 把字符串转换成整数(2014年阿里巴巴实习生招聘面试题)
  10. unity怪物攻击玩家减血_利用Unity协程实现一个简单的怪物寻路与跟随AI