代码随想录——单词接龙(图论)

news2024/10/5 14:01:41

题目

字典 wordList 中从单词 beginWord 和 endWord 的 转换序列 是一个按下述规格形成的序列:

序列中第一个单词是 beginWord 。 序列中最后一个单词是 endWord 。 每次转换只能改变一个字母。
转换过程中的中间单词必须是字典 wordList 中的单词。 给你两个单词 beginWord 和 endWord 和一个字典
wordList ,找到从 beginWord 到 endWord 的 最短转换序列 中的 单词数目 。如果不存在这样的转换序列,返回 0。
示例 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” 不在字典中,所以无法进行转换

思路

以实例一为例子,可以看出hit到cog的路线,不止一条,有三条,一条是最短的长度为5,两条长度为6
在这里插入图片描述

本题只需要求出最短长度就可以了,不用找出路径

本题有两个问题:

  1. 图中的线是如何连在一起的
  2. 起点和终点的最短路径长度

首先题目中并没有给出点与点之间的连线,而是要我们自己去连,条件是字符只能差一个,所以判断点与点之间的关系,要自己判断是不是差一个字符,如果差一个字符,那就是有连接,即如果两个单词可以只改变一个字母进行转换,那么说明他们之间有一条双向边

然后就是求起点和终点的最短路径长度,这里无向图求最短路,求最短,立即推—>广搜,广搜只要到达终点,就一定是最短的路径。因为广搜就是以起点中心向四周扩散的搜索。

另外要注意的点就是

  • 本题是一个无向图,需要使用标记位,标记节点是否走过,防止死循环
  • 本题给出的集合是数组型的,可以转成set结构,查找更快

java代码如下:

class Solution {
	public int  ladderLength(String beginWord ,String endWord, List<String> wordList){
		HashSet<String> wordSet = new HashSet<>(wordList);
		if(wordSet.size() == 0 || !wordSet.contains(endWord)){//endWord不在字典中,就无法进行转换
			return 0;
		}
		Queue<String> que = new LinkedList<>();//bfs 队列
		que.offer(beginWord);//起始元素入队
		Map<String,Integer> map = new HashMap<>();//记录单词对应路径长度,映射关系
		map.put(beginWord,1);//初始化
		
		while(!que.isEmpty()){
			String word = que.poll();//取出队头单词
			int path = map.get(word);//获取到该单词的路径长度
			for(int i = 0; i < word.length(); i++){//遍历单词的每个字符
				char[] chars = word.toCharArray();//将单词转换为char array,方便替换
				for(char k = 'a'; k <= 'z'; k++){//从'a' 到 'z' 遍历替换
					chars[i] = k;替换第i个字符,注意这里是每次是一个位置替换一个字符,保证有边,因为只有一次改一个字符才能算有边
					String newWord = String.valueOf(chars);//得到新的字符串
					if(newWord.equals(endWord)){//只要转成功了,就返回当前路径加一,如果没有转成功,就去判断是否转成了中间单词,即下面的if条件
						return path + 1;
					}
					if(wordSet.contains(newWord) && !map.containsKey(newWord)){如果替换后的新单词在set中(即转成了中间单词),并且没有访问过
						map.put(newWord,path + 1);//记录这个中间单词对应的路径长度,相当于标记访问过了
						que.offer(newWord);//入队,继续下一轮判断,即对这个newWrod继续替换一个字符进行下去					
					}
				}
			}
		}
		return 0;
	}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/13681.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AWVS的简介与安装

目录预备知识实验目的实验环境实验步骤一任务描述&#xff1a;AWVS的简介实验步骤二任务描述&#xff1a;进行AWVS10.5的安装、界面介绍和简单的使用实验步骤三任务描述&#xff1a;AWVS 11.x的安装与简单使用预备知识 Acunetix Web Vulnerability Scanner&#xff08;简称AWV…

Qtcreator中文显示乱码问题终于解决

问题描述&#xff1a;Qtcreator安装好后打印中文在控制台输出乱码&#xff08;自己也在网上查找了好久&#xff0c;终于找到解决方法了&#xff09;。 原因剖析&#xff1a;因为项目的编码与控制台的编码不一致导致的&#xff0c;而qt编码设置里并没有控制台的默认编码&#xf…

华为M-LAG跨设备链路聚合技术理论讲解

目录 为什么会出现M-LAG M-LAG基本概念 M-LAG建立过程 M-LAG的协议兼容性 M-LAG的防环机制 M-LAG正常工作流量转发 单播流量转发 组播流量转发 广播流量转发 M-LAG故障场景流量转发 上行链路故障 下行链路故障 M-LAG主设备故障 Peer-link故障 M-LAG二次故障&…

Kafka部署实验

一、实验介绍 1.1实验内容 实验在Hadoop集群上部署Kafka分布式发布订阅消息系统&#xff0c;并完成kafka消息管理验证。 1.2实验知识点 Kafka集群部署 Kafka消息处理流程 1.3实验环境 Kafka2.11 网易云平台 1.4实验资源 资源名称存储目录Kafka安装包/opt/software/pack…

工业数采网关 工业数采模块 工业数采工业数采终端硬件

计讯物联TG462工业数据采集网关&#xff0c;支持工业采集、边缘计算、无线通信、远程控制、远程运维&#xff0c;广泛应用于智慧工业远距离通信自动化管控物联网场景。计讯工业数采网关TG462接口丰富、丰富协议库、支持主流PLC&#xff0c;对接第三方云平台&#xff0c;工业级设…

【软件测试面试题】面试官:你在工作中发现最有意义的bug?让他满意的回答......

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 测试面试中被问的问…

iOS开发之自定义的framework添加第三方framework,lipo和ar命令看.o文件

由于需要将之前生成的mediapipe.framework添加到自己的framework中&#xff0c;但是很奇怪用普通的拖拽方式添加&#xff0c;项目工程在加载运行自己的framework时&#xff0c;总是找不到mediapipe.framework中的头文件&#xff0c;而只编译自己的framework时&#xff0c;也是可…

免费域名证书最新申请方式大全

目前市场环境下&#xff0c;可获得域名SSL证书的方式有很多&#xff0c;一般有付费和免费划分。对于想免费使用域名SSL证书的朋友&#xff0c;这里收集整理了几个常用的SSL证书申请方式。 对于SSL证书的用处&#xff0c;简单的来说&#xff0c;就是加密数据传输&#xff0c;使…

这么讲不怕你不懂负载均衡

现在前沿技术领域一个很有突破口和争议性的领域就是分布式系统以及高并发的解决与处理。而解决高并发其中一个很有意思的方法就是负载均衡。 那么&#xff0c;究竟什么才是负载均衡呢&#xff1f; 首先&#xff0c;维基百科是这样说的&#xff1a; 负载平衡&#xff08;英语&a…

Java_多态

作者&#xff1a;爱塔居的博客_CSDN博客-JavaSE领域博主 专栏&#xff1a;JavaSE 作者简介&#xff1a;大三学生&#xff0c;希望跟大家一起进步 文章目录 目录 文章目录 一、多态概念 二、多态实现条件 三、重写 四、向上转型和向下转型 4.1 向上转型 4.2 向下转型 五、多态的…

社交电商平台的消费返利模式——共享购

实际上目前很多商家平台提到做电商平台&#xff0c;坚信最先第一个想到的是一些大型好像淘宝、某猫、某多多这些&#xff0c;但是随着社交媒体电商行业发展&#xff0c;大量商业运营模式及其商业平台&#xff0c;第一个的自然也就相对于交易返利模式的渠道&#xff0c;那大家在…

ubuntu中redis客户端与服务端命令、redis数据类型、字符串string、哈希hash、列表list、集合set、有序集合zset操作命令

一、NoSQL概述 NoSQL(not only SQL)&#xff1a;泛指非关系型数据库&#xff0c;是一类新出现的数据库&#xff0c;不支持SQL语法&#xff0c;其存储的数据都是kv形式&#xff0c;存储结构与关系型数据库中的关系表完全不同 NoSQL产品种类&#xff1a;主要有Redis、MongoDB、…

超百万人用它生成3D头像,这项技术刚刚中选了SIGGRAPH Asia 2022

如何才能做一个和真人一样的 3D 头像&#xff1f; 先上传一张照片&#xff1a; 变成这样&#xff1a; 换一个人的照片&#xff1a; 再看一个例子&#xff1a; 眼镜也可以放进来&#xff1a; 在此基础上&#xff0c;还可以换上各种各样的发型、饰品&#xff0c;眼睛、帽子、发色…

Css定位

定位 为什么需要定位&#xff1f; 提问&#xff1a;以下情况使用标准流或者浮动能实现吗&#xff1f; 某个元素可以自由的在一个盒子内移动位置&#xff0c;并且压住其他盒子。当我们滚动窗口的时候&#xff0c;盒子是固定在屏幕的某个位置的 所以&#xff1a; 浮动可以让多…

笨办法学 Python(第三版)习题 2: 注释和#号

参考书籍 代码 # -*- coding: utf-8 -*-# A comment, this is so you can read your program later. # Anything after the # is ignored by python.print("I could have code like this.") # and the comment after is ignored# You can also use a comment to &qu…

北京外国语大学2023年上半年公派英语高级培训班开始招生

教育部指定出国留学人员培训部的“培训班结业证书”是国家留学基金委&#xff08;CSC&#xff09;公派项目认可的外语水平证明文件之一。近日&#xff0c;北京外国语大学发出2023年上半年公派英语高级培训班招生简章。为方便培训者了解情况&#xff0c;知识人网小编特转载如下。…

LeetCode[112]路径总和

难度&#xff1a;简单 题目&#xff1a; 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径&#xff0c;这条路径上所有节点值相加等于目标和 targetSum 。如果存在&#xff0c;返回 true &#xff1b;否则&#xff0c…

cookie

cookie Cookie是一个客户端会话技术&#xff0c;是由服务器端创建&#xff0c;放在响应头发送到客户端保存&#xff0c;用于存储少量数 据&#xff0c;因为存放在客户端中&#xff0c;容易被人编造伪造&#xff0c;不是很安全。一般不用于存储重要信息。它是通过键值对传递信…

载波通信在电网智能化中的应用

目录载波通信在电网智能化中的应用电力载波通信特点电力载波通信在电力智能化中应用载波数据通信载波语音通信高速电力线通信&#xff08;HPLC&#xff09;载波通信在电网智能化中的应用 电力载波通信特点 电力载波通信&#xff08;Power line Communication&#xff09;即PL…

Nginx防盗链

资源盗链 资源盗链指的是此内容不在自己服务器上&#xff0c;而是通过技术手段&#xff0c;绕过别人的限制将别人的内容放到自己页面上最终展示给用户。以此来盗取大网站的空间和流量。简而言之就是用别人的东西成就自己的网站。 案例 创建steal.html&#xff0c;页面引用两…