Word Ladder @LeetCode
最直观的思路就是DFS,每次变成新的单词,同时从字典中删除新单词然后不断递归。
大数据时候超时。可以使用BFS,求出每次改变一个字母后在字典中存在的单词。之后逐层便利,和DFS不一样不一次走到最深。
思考一下DFS和BFS的区别,举个最简单的例子,111 -> 311。
DFS的话,111->112,之后需要DFS 112的所有变形。同理111->113之后还要遍历113的所有变形。
而BFS的话,111->112 113 121 131 211 311只需要6次就能找到最终结果。
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相关推荐
- 【难点+重点BFS】LeetCode 126. Word Ladder II
LeetCode 126. Word Ladder II Solution1: 参考自花花酱:http://zxi.mytechroad.com/blog/searching/leetcode-126 ...
- 【重点BFS】LeetCode 127. Word Ladder
LeetCode 127. Word Ladder Solution1:我的超过40%的AC的答案 原先利用BFS做但是内存溢出未能AC:进过修改加上了标记是否访问过的visited数组,可以AC啦~ ...
- LeetCode 127. Word Ladder
原题链接在这里:https://leetcode.com/problems/word-ladder/ 题目: Given two words (beginWord and endWord), and ...
- Leetcode的word ladder问题
127. Word Ladder 题意如下: 给定一个开始字符串和结束字符串以及含有大量字符串的字典,要求通过一定规则,能从开始字符串变换到结束字符串,求其最小变换字符串数目,该规则如下: 1 从开始 ...
- PHP第五周答案,算法设计与分析第五周作业——Word Ladder
算法设计与分析第五周作业--Word Ladder 上周找了一道深度搜索优先搜索的算法题来做,于是这周就选了一道广度优先搜索算法题来试试手. 本周所选题目:原题目链接 题目详情 题目大意:给出一个字符 ...
- 算法细节系列(20):Word Ladder系列
算法细节系列(20):Word Ladder系列 详细代码可以fork下Github上leetcode项目,不定期更新. 题目摘自leetcode: 1. Leetcode 127: Word Lad ...
- Word Ladder
LeetCode[127. Word Ladder] 题解 难度[medium] 题目: Given two words (beginWord and endWord), and a dictiona ...
- 33 单词接龙(Word Ladder)
文章目录 1 题目 2 解决方案 2.1 思路 2.2 图解 2.2 时间复杂度 2.3 空间复杂度 3 源码 1 题目 题目:单词接龙(Word Ladder) 描述:给出两个单词(start和en ...
- Word Ladder系列
1.Word Ladder 问题描述: 给两个word(beginWord和endWord)和一个字典word list,找出从beginWord到endWord之间的长度最长的一个序列,条件: 1. ...
最新文章
- 软件工程需求设计说明书
- QIIME 2教程. 32如何写方法和引用Citing(2021.2)
- 掌握JAVA多线程的利器-线程池
- OSMboxPost()
- oracle备份恢复
- python 机器人开发库,如何为机器人框架创建自定义Python代码库
- C# Readonly和Const的区别
- 爬虫---如何抓取app的思路和方案
- 司空见惯 - 会议室名称
- Android 微信支付
- RobotStudio软件:ABB机器人弧焊焊接虚拟仿真实现方法
- 理财入门:企业分析(简述)
- sql 约束(sql server 环境)
- Unity 关于Spine不规则响应区域解决方法
- 小米运动改步数不同步的原因找到了,尽然是这问题
- a标签下载文件header中带上用于鉴权的token
- Response重定向
- python pandas库作用_python pandas库的一些使用总结
- IRIS(Incorporated Research Institutions for Seismology)常用功能介绍
- 关于SSL握手的错误解决
热门文章
- 在VMware虚拟机上使用网络测试命令找出虚拟机的IP地址
- 【答读者问13】backtrader实盘交易中应该注意些什么(数据篇)?
- SpringBoot项目生成二维码,再生成Excel文件导出,亲测采坑
- 分享一个在微信上捞几万块的操作
- 活动星投票优秀支书网络评选微信的投票方式线上免费投票
- 流量卡激活看快递:京东为快递激活,EMS/顺丰为自主激活。
- mysql怎么修改表的列名字_怎么修改mysql的表名和列名?
- 判断浏览器类型(附区分qq浏览器和chrome浏览器正则)
- 把字符串转换成整数(2014年阿里巴巴实习生招聘面试题)
- unity怪物攻击玩家减血_利用Unity协程实现一个简单的怪物寻路与跟随AI