算法题:单词接龙

单词接龙

字典 wordList 中从单词 beginWord 到 endWord 的 转换序列 是一个按下述规格形成的序列 beginWord -> s1 -> s2 -> … -> sk:

每一对相邻的单词只差一个字母。
对于 1 <= i <= k 时,每个 si 都在 wordList 中。注意, beginWord 不需要在 wordList 中。
sk == endWord
给你两个单词 beginWord 和 endWord 和一个字典 wordList ,返回 从 beginWord 到 endWord 的 最短转换序列 中的 单词数目 。如果不存在这样的转换序列,返回 0 。

示例

![示例](https://i-blog.csdnimg.cn/direct/165ed83a59d0421489d4b8ecafb1f9d9.pn

这个问题可以使用广度优先搜索(BFS)来解决。首先,我们需要创建一个图来表示单词之间的转换关系。然后,从 beginWord 开始进行 BFS,直到找到 endWord 或者遍历完所有可能的路径。

以下是解决此问题的 JavaScript 代码示例:

function ladderLength(beginWord, endWord, wordList) {const wordSet = new Set(wordList);if (!wordSet.has(endWord)) return 0;const queue = [beginWord];const visited = new Set([beginWord]);let level = 1;while (queue.length > 0) {const size = queue.length;for (let i = 0; i < size; i++) {const currentWord = queue.shift();if (currentWord === endWord) return level;for (let j = 0; j < currentWord.length; j++) {for (let k = 0; k < 26; k++) {const newWord = currentWord.slice(0, j) + String.fromCharCode('a'.charCodeAt(0) + k) + currentWord.slice(j + 1);if (wordSet.has(newWord) && !visited.has(newWord)) {queue.push(newWord);visited.add(newWord);}}}}level++;}return 0;
}// Example usage:
const beginWord = "hit";
const endWord = "cog";
const wordList = ["hot", "dot", "dog", "lot", "log", "cog"];
console.log(ladderLength(beginWord, endWord, wordList)); // Output: 5

在这个代码中,我们首先将 wordList 转换为一个 Set,以便快速检查一个单词是否在 wordList 中。然后,我们使用一个队列来进行 BFS,并使用一个 visited 集合来避免重复访问相同的单词。每次从队列中取出一个单词,我们尝试将其每个位置替换为其他字母,如果得到的新单词在 wordList 中且未被访问过,就将其加入队列。当遇到 endWord 时,返回当前的层级作为最短转换序列的长度。如果遍历完所有可能的路径仍未找到 endWord,则返回 0。

以下是解决此问题的 Python 代码示例:

from collections import defaultdict, dequedef ladderLength(beginWord, endWord, wordList):if endWord not in wordList:return 0# 构建图L = len(beginWord)all_combo_dict = defaultdict(list)for word in wordList:for i in range(L):all_combo_dict[word[:i] + "*" + word[i+1:]].append(word)# 使用队列进行广度优先搜索queue = deque([(beginWord, 1)])visited = set([beginWord])while queue:current_word, level = queue.popleft()for i in range(L):intermediate_word = current_word[:i] + "*" + current_word[i+1:]for word in all_combo_dict[intermediate_word]:if word == endWord:return level + 1if word not in visited:visited.add(word)queue.append((word, level + 1))# 清空当前中间词的所有单词,避免重复访问all_combo_dict[intermediate_word] = []return 0# 示例用法
beginWord = "hit"
endWord = "cog"
wordList = ["hot", "dot", "dog", "lot", "log", "cog"]
print(ladderLength(beginWord, endWord, wordList))  # 输出应为 5

我们首先构建了一个字典 all_combo_dict,它将每个单词的所有可能的中间状态映射到与其匹配的其他单词。然后,我们使用一个队列来进行广度优先搜索,同时跟踪当前的层级。当我们找到 endWord 时,返回当前的层级加一(因为我们需要包括 beginWord)。如果遍历完所有可能的路径都没有找到 endWord,则返回 0。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RuoYi-Cloud 部署与配置 [CentOS7]

静态IP设置 # 修改网卡配置文件 vim /etc/sysconfig/network-scripts/ifcfg-ens33# 修改文件内容 TYPEEthernet PROXY_METHODnone BROWSER_ONLYno BOOTPROTOstatic IPADDR192.168.18.130 NETMASK255.255.255.0 GATEWAY192.168.18.2 DEFROUTEyes IPV4_FAILURE_FATALno IPV6INIT…

SpringBoot中基于MongoDB的findAndModify原子操作实现分布式锁原理详解

❃博主首页 &#xff1a; 「码到三十五」 &#xff0c;同名公众号 :「码到三十五」&#xff0c;wx号 : 「liwu0213」 ☠博主专栏 &#xff1a; <mysql高手> <elasticsearch高手> <源码解读> <java核心> <面试攻关> ♝博主的话 &#xff1a…

计算机网络技术专业SDN(软件定义网络)实训室解决方案

一、前言 随着信息技术的飞速发展&#xff0c;网络架构正经历着前所未有的变革&#xff0c;其中软件定义网络&#xff08;SDN, Software-Defined Networking&#xff09;作为未来网络的核心技术之一&#xff0c;正逐步成为计算机网络技术专业教学与科研的重要方向。唯众&#…

Openwrt 安装 AX210 无线网卡

安装 TTYD 我安装的是官方原版的 Openwrt&#xff0c;首先需要安装 YYTD 来从网页控制 Openwrt。 安装驱动 参考这个链接&#xff0c;跟着做。 iwlwifi-firmware-ax210 我买设备技术提供代码如下&#xff0c;但是没有安装 成功&#xff0c;中间报错。 opkg update opkg i…

Vue(十一)默认插槽、具名插槽、作用域插槽

文章目录 一、需求二、插槽1. 默认插槽2. 具名插槽3. 作用域插槽 一、需求 有三个Category组件&#xff0c;展示不同的内容。 需求&#xff1a;美食模块需要展示图片&#xff0c;游戏模块还是文字&#xff0c;电影模块展示预告片。 <!--App组件--> <template>&l…

一.海量数据实时分析-Doris入门和安装

前言 停了一个月又开始写文章啦&#xff0c;因为公司数据量达到了几十亿&#xff0c;老板需要做实时数据分析&#xff0c;报表看板。这么大的数据量比较好的选择是使用Doris来做&#xff0c;他可以脱离hadoop生态独立使用所以大受企业喜爱&#xff0c;也因为如此就有了这个系列…

springboot学习11 (菜品缓存redis)

缓存逻辑分析 目的&#xff1a;减轻数据库压力每个分类下的菜品保存一份缓存数据数据库中菜品数据有变更时清理缓存数据 keyvaluedish_1string(...)dish_2string(...)dish_3string(...) GetMapping("/list")ApiOperation("根据分类id查询菜品")public Res…

敏捷需求管理,推动敏捷项目成功——Leangoo领歌敏捷工具

在敏捷项目管理中&#xff0c;需求管理是决定项目成功的关键环节。准确捕捉和高效管理需求&#xff0c;不仅能避免项目偏航&#xff0c;还能确保最终交付的产品与客户预期高度契合。Leangoo领歌敏捷工具&#xff0c;正是为此而生&#xff0c;助力团队轻松实现需求管理的每一步。…

分贝通助力元气森林企业支出一体化降本提效

凭借着“0糖0脂0卡”这句广告语,元气森林几乎是一锤砸中了年轻消费者的内心,让“好喝不胖”深入人心,成为了国内饮品消费的新风向标。如果我们从近两年的快消饮品中选出几款深受消费者喜爱的“国货品牌”的话,相信「元气森林」一定上榜。 元气森林成立于2016年,旗下拥有元气森林…

C语言典型例题59

《C程序设计教程&#xff08;第四版&#xff09;——谭浩强》 题目&#xff1a; 例题4.11 译密码。为使电文保密&#xff0c;往往按一定规律将其转换为密码&#xff0c;收报人再按约定的规律将其译回原文。 例如&#xff0c;可以按以下规律将电文变为密码&#xff1a; 将字母A…

Harbor部署docker私人仓库

1、新建虚拟机rhel9 2、配置网络 #修改内核参数使网卡名称为ethxxx grubby --update-kernel ALL --args net.ifnames0reboot #配置网络 vim /etc/NetworkManager/system-connections/eth0.connection 内容为&#xff1a;[connection] ideth0 typeethernet interface-nameeth0…

储能电站变流器设计与仿真研究(文章复现matlab)

为了有效解决交流子网与直流子网间的功率传输&#xff0c; 降低电流谐波&#xff0c; 基于三相电压源型变流器及变流器的控制方法&#xff0c; 在 MATLAB R2018a 环境下搭建了储能变流器的整体仿真模型。 电路主要由三相电网、 三相 PWM 变流器、Buck/Boost 变换器和蓄电池构成…

使用Dify搭建企业知识库聊天机器人

本文简介 在当今数字化时代&#xff0c;企业知识库的建设和维护对于提升工作效率和服务质量至关重要。AI聊天机器人作为知识库的交互界面&#xff0c;可以提供24/7的即时服务。 本文将介绍如何使用 Dify 这一工具快速搭建企业知识库聊天机器人&#xff0c;它可以当你企业的职…

sqli-libs第四关详解

首先判断是数字型注入还是字符型注入 正常显示&#xff0c;说明是字符型注入&#xff0c;那么尝试单引号闭合 还是正常显示&#xff0c;尝试双引号闭合 有报错信息&#xff0c;含有括号&#xff0c;这时就应该想到&#xff0c;sql代码是("$id")这样写的了。直接采取闭…

HTML5有格调的个人介绍网站源码

文章目录 1.设计来源1.1 主界面1.2 个人信息界面1.3 项目统计界面1.4 我的相册界面1.5 朋友评价界面1.6 保持联系界面 2.效果和源码2.1 动态效果2.2 源代码 源码下载万套模板&#xff0c;程序开发&#xff0c;在线开发&#xff0c;在线沟通 作者&#xff1a;xcLeigh 文章地址&a…

第L2周:机器学习-线性回归

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 目标&#xff1a; 学习简单线性回归模型和多元线性回归模型通过代码实现&#xff1a;通过鸢尾花花瓣长度预测花瓣宽度 具体实现&#xff1a; &#xff08;一&…

【JS】事件捕获和事件冒泡的区别

事件捕获和事件冒泡是指在 DOM 树中处理事件时的两种不同的传播方式。它们之间的主要区别在于事件传播的方向和顺序&#xff1a; 事件捕获&#xff08;Capture&#xff09; 方向&#xff1a; 从最外层的祖先元素向目标元素传播。顺序&#xff1a; 事件首先从最外层的祖先元素…

随机化 bbr probebw cycle phase

常打磨常新&#xff0c;bbr 和 inflight 守恒算法的模型和仿真也在不断优化。 再次给出 bbr 模型&#xff0c;这次修改了 d x d t \dfrac{dx}{dt} dtdx​ 的表达式&#xff0c;由 g 2 ⋅ x ⋅ r m i n g_2\cdot x\cdot r_{min} g2​⋅x⋅rmin​计算。同时加入了微观建模 pro…

5.注册中心的其他实现-Nacos

文章目录 1.Nacos简介2.Nacos的安装2.1Nacos Windows本地启动不成功&#xff1f;2.2Linux环境下载并启动 3. Nacos的使用4.Nacos的负载均衡5.Nacos 健康检查6.Nacos 环境隔离7.Nacos 配置中心7.1为什么需要配置中心7.2 Nacos配置中心使用7.3 Data id7.4Nacos 上Linux部署服务7.…

XSS LABS - Level 13 过关思路

关注这个靶场的其他相关笔记&#xff1a;XSS - LABS —— 靶场笔记合集-CSDN博客 0x01&#xff1a;过关流程 进入靶场&#xff0c;老样子&#xff0c;右击&#xff0c;查看页面源码&#xff0c;找找不同&#xff1a; 可以看到&#xff0c;本关又多了一个新字段 t_cook&#xf…