Word Ladder

Word Ladder/ Word Ladder II 题目分析 1. Word Ladder和Word Ladder II两题是连续的,基本是同一个问题的两个难度,因此放在一起做了。 2. Word Ladder是要找出一条从Start Word 到 End Word的最短路径,一个比较简单的想法就是建立一张图,描述每个在字典中的词之间的可达性,只有任意两个词间有且仅有一个字母不同的时候是直接可达的,然后用BFS的方式去找到Start Word和 阅读详情

Given two words (start and end), and a dictionary, find the length of shortest transformation sequence from start to end, such that:

  1. Only one letter can be changed at a time
  2. Each intermediate word must exist in the dictionary

For example,

Given:
start = "hit"
end = "cog"
dict = ["hot","dot","dog","lot","log"]

As one shortest transformation is "hit" -> "hot" -> "dot" -> "dog" -> "cog",
return its length 5.

Note:
Return 0 if there is no such transformation sequence.

Idea: create graph and perform BFS.

public class Solution {
	
	public static void main(String[] args) {
		HashSet<String> dict = new HashSet<String>();
		String[] strDict = {"hot","dot","dog","lot","log"};
		for (String s : strDict) {
			dict.add(s);
		}
		String start = "hit";
		String end = "cog";
		Solution solution = new Solution();
		System.out.println(solution.ladderLength(start, end, dict));
	}
	
	public int ladderLength(String start, String end, HashSet<String> dict) {
	
		//create graph
	   HashMap<String, ArrayList<String>> graph = new HashMap<String, ArrayList<String>>();
	   
	   graph.put(start, new ArrayList<String>());
	   graph.put(end, new ArrayList<String>());
	   for(String d : dict) {
		   graph.put(d, new ArrayList<String>());
	   }
	   for(String s : graph.keySet()) {
		   ArrayList<String> list = graph.get(s);
	       for(String t : graph.keySet()) {
	           if(getDiff(s,t) == 1) {
	               list.add(t);
	           }              
	       }
	   }
	   // use BFS to traverse the node in the graph, we begin with "start"
	   int step = 0;
	   HashSet<String> visited = new HashSet<String>();
	   ArrayList<String> firstLevel = new ArrayList<String>(graph.get(start));
	   
	   while (firstLevel.size() != 0) {
		   step++;
		   ArrayList<String> nextLevel = new ArrayList<String>();
		   for (String s : firstLevel) {
			   if (s.equals(end)) return step + 1;
			   visited.add(s);
			   nextLevel.addAll(graph.get(s));
		   }
		   firstLevel.clear();
		   for (String t : nextLevel) {
			   if (!visited.contains(t)) {
				   firstLevel.add(t);
			   }
		   }
		   nextLevel.clear();
	   }
	   return 0;
	}

	public int getDiff(String w1, String w2) {
	   int count = 0;        
	   for(int i = 0; i < w1.length(); i++) {
	       if(w1.charAt(i) != w2.charAt(i)) {
	           count++;
	       }
	   }
	   return count;
	}
}


图解LeetCode:Word Ladder 文章目录思考过程建立索引代码实现总结 这是LeetCode的第127号题目Word Ladder,也就是单词梯子,那这个题目是什么意思呢? 给定两个单词,一个为开头单词beginWord,一个为结尾单词endWord,并且给定一个单词列表,找出从开头单词到结尾单词的最短转换路径,转换规则是这样的: 一次只能转换单词中的一个字符 每次转换后的单词必须存在于单词列表中 比如给定开头单词“hit”,... 阅读详情

相关推荐

LeetCode126—Word Ladder II

LeetCode126—Word Ladder II

上善若水 4910

word ladder(词梯) of two versions

这次,我们主要谈一下leetcode上的word ladder问题,在leetcode上,有两道关于word ladder的问题,一道是求最短的word ladder的长度,另一道则是求所有的最短的word ladder,虽然这两道题很像,但难度系数是不一样的,第二道难度系数要高一点,我们先从简单的看起吧。     第一道题目是这样的:给定两个单词和一个词典,找到从开始单词到结束单词的最短转化路

wuh2333的博客 783

word ladder

经典字梯游戏c++代码,经测试通过的哦,leetcode上面的题目

LeetCode[127. Word Ladder] 题解 难度[medium]

C++语言,使用BFS解决word ladder问题

cs_linyf的博客 3173

基于qiime2的16S数据分析全流程:从导入数据到下游分析一条龙

基于qiime2的16s测序数据分析分析激活qiime环境我已经把上面这句代码放在了.bashrc里面,因此激活qiime2环境只需要运行activate_qiime即可/bin/bash# 设置目录路径# 输出表头 echo -e "sample-id\tforward-absolute-filepath\treverse-absolute-filepath"# 遍历_R1和_R2文件do # 检查R1文件是否存在then# 获取样本ID(去掉_R1.fastq.gz)

2301_76771985的博客 5527

Catia二次开发QueryInterface的操蛋问题

探索了很久,尝试录制宏,打开部件属性窗口,然后随意设置一些属性(必须改变一些东西才能录制成功,否则不会录制到任何东西),再看录制的结果,发现原来CATIAAnalyze是从Product那里来的。例如获得一个部件的体积,找到相关接口CATIAAnalyze,但是这个部件的CATIAAnalyze的对象不知道如何获取。总结一下,写Catia二开代码,就像漂亮国那款《莫里秀》 又名《爸爸死哪了》的综艺节目,大部分时间都是在找爸爸!Catia二开很痛苦,明明已经找到接口类,但是却不知道怎么获得这个接口类的对象。

gergul的专栏 748

33 单词接龙(Word Ladder)

文章目录1 题目2 解决方案2.1 思路2.2 图解2.2 时间复杂度2.3 空间复杂度3 源码 1 题目 题目:单词接龙(Word Ladder) 描述:给出两个单词(start和end)和一个字典,找出从start到end的最短转换序列,输出最短序列的长度。变换规则如下:每次只能改变一个字母。变换过程中的中间单词必须在字典中出现。(起始单词和结束单词不需要出现在字典中) 如果不存在这样的转换序列,返回 0。 所有单词具有相同的长度。 所有单词只由小写字母组成。 字典中不存在重复的单词。 你可以假设 b

SeeDoubleU的专栏 687

多目标跟踪(MOT)中的卡尔曼滤波(Kalman filter)和匈牙利(Hungarian)算法详解

多目标跟踪(MOT)中的卡尔曼滤波(Kalman filter)和匈牙利(Hungarian)算法详解 1. 概览 在开始具体讨论卡尔曼滤波和匈牙利算法之前,首先我们来看一下基于检测的目标跟踪算法的大致流程。 2. 卡尔曼滤波(Kalman filter) 目标跟踪中使用的就是最基础的 Kalman filter 算法。这里也仅仅讨论最基础的 Kalman filter 算法。 卡尔曼滤波算法的过程很简单,如下图所示。最核心的两个步骤就是预测和更新(下图的 correct)。 在目标跟踪任务中,目标的

生命在于折腾! 2万+

LeetCode127—Word Ladder

LeetCode127—Word Ladder

上善若水 2703

数据中心——Vxlan基本概念1

东西流量指的就是横向流量-------例如:服务器与服务器之间交换流量南北流量指的就是纵向流量-------例如:客户端和服务器之间的流量以下主要是讲解业务平面的网络架构(一般业务平面就需要用到专用的数据中心交换机)

m0_49864110的博客 1万+

Unity 热更新技术 |(六)xLua框架学习最新系列完整教程

开始学习热更新方面系列知识,就从这一篇开始吧! 本系列教程 会从热更新基本概念出发,详细介绍热更新相关的全套知识点。 如热更新技术基本原理、热更新主流方案、AssetBundle系列教程、Lua语言编程、Lua与Unity交互教程、Xlua框架使用、热更新实战教程等方面。 热更新作为一个开发者必备技能,如果想学习的话,可以从现在开始了哦~ 接下来先从XLua学习使用 开始学习吧!

努力前行,总会成为自己心中的那道光 1万+

LeetCode——Word Ladder II

链接:http://leetcode.com/onlinejudge#question_126 原题: Given two words (start and end), and a dictionary, find all shortest transformation sequence(s) from start to end, such that: Only one

niaokedaoren的专栏 8948

Sparse-ICP—(4) 加权稀疏迭代最近点算法(matlab版)

本文介绍了加权稀疏迭代最近点算法的实现。

点云侠的博客 643

leetcode之word-ladder

leetcode之word-ladder 题目 Given two words (start and end), and a dictionary, find the length of shortest transformation sequence from start to end, such that: Only one letter can be changed at a time Ea...

此心光明,亦复何言~ 529

【数字IC刷题】华为海思数字IC笔试题(3)详细解析版

【数字IC刷题】华为海思数字IC笔试题(3)详细解析版

MoorePlus的博客 2370

YOLO11改进|注意力机制篇|引入先验卷积注意力机制CPCA

YOLO11中添加先验卷积注意力机制CAPA

A1983Z的博客 2375

[Lintcode]120. Word Ladder /[Leetcode]127. Word Ladder

120. Word Ladder / 127. Word Ladder 本题难度: Hard/Medium Topic: Data Structure Description Given two words (start and end), and a dictionary, find the length of shortest transformation sequence from sta...

weixin_30932215的博客 150

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Leetcode 127 Word Ladder I

这道题目推荐和Leetcode 102 Binary Tree Level Order Traversal(http://blog.csdn.net/zxzxy1988/article/details/8597354)连起来看 这道题目首先想到的是DFS,或曰backtracking,也就是每次都找到一个可能的路径,最后比较所有路径中最小的就是题目所求。这样做显然需要较多的时间,因为我们

思维决定一切 1万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

LeetCode 127. Word Ladder

127. Word Ladder Given two words (beginWord and endWord), and a dictionary's word list, find the length of shortest transformation sequence from beginWord to endWord, such that: Only one letter ca

柳婼 の blog 1049

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

[LeetCode]Word Ladder II

WordLadder I Given two words (beginWord and endWord), and a dictionary’s word list, find the length of shortest transformation sequence from beginWord to endWord, such that: Only one lette

yy254117440的博客 452

leetcode 126. Word Ladder II

leetcode 126. Word Ladder II   写这一题 真的非常适合复习bfs与dfs啊 import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedList; import java.util.List; import java.ut

独钓寒江雪 559

leetcode Word Ladder II

和上题Word Ladder I题目差不多,不过这里是要记录所有最段路径的可能。 不同点在于,我们不能再BFS每层的时候把相距一个字符的字符串在dict中删除,因为hot -> hit 的话其他的例如 jit -> hit 就是hit可以出现在两条路径里头。所以不能立马删除。但是我们发现我们可以删除的是我们遍历完的每层的字符串,我们用known来存遍历完的层,unknow...

214

[leecode]Word Ladder II

Word Ladder II Given two words (start and end), and a dictionary, find all shortest transformation sequence(s) from start to end, such that:Only one letter can be changed at a timeEach intermediate...

mc46790090的专栏 178

Word Ladder II -- LeetCode

Word Ladder II -- LeetCode

qq_44939824的博客 139
上一篇: huffman编码及解码实现
下一篇: 二叉树非递归遍历
beiyetengqing
博客等级 码龄14年 148粉丝 169原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值