LeetCode 126. 单词接龙 II(图的BFS)

1. 题目

给定两个单词(beginWord 和 endWord)和一个字典 wordList,找出所有从 beginWord 到 endWord 的最短转换序列。

转换需遵循如下规则:

  • 每次转换只能改变一个字母。
  • 转换过程中的中间单词必须是字典中的单词。

说明:
如果不存在这样的转换序列,返回一个空列表。
所有单词具有相同的长度。
所有单词只由小写字母组成。
字典中不存在重复的单词。
你可以假设 beginWord 和 endWord 是非空的,且二者不相同。

示例 1:
输入:
beginWord = "hit",
endWord = "cog",
wordList = ["hot","dot","dog","lot","log","cog"]
输出:
[["hit","hot","dot","dog","cog"],["hit","hot","lot","log","cog"]
]示例 2:
输入:
beginWord = "hit"
endWord = "cog"
wordList = ["hot","dot","dog","lot","log"]
输出: []
解释: endWord "cog" 不在字典中,所以不存在符合要求的转换序列。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/word-ladder-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

类似题目:
LeetCode 127. 单词接龙(图的BFS/双向BFS)
程序员面试金典 - 面试题 17.22. 单词转换(BFS)

2. BFS解题

  • 详见注释
class Solution {
public:vector<vector<string>> findLadders(string beginWord, string endWord, vector<string>& wordList) {vector<vector<string>> ans;unordered_set<string> wlist(wordList.begin(),wordList.end());unordered_set<string> words;//存放当次被加入到路径的单词queue<vector<string>> q;//队列里存放的是可行的路径q.push({beginWord});words.insert(beginWord);int level = 1, minLevel = INT_MAX, n, i;vector<string> frontPath, newPath;string lastWordOfPath, newLastWord;char ch;while(!q.empty()){n = q.size();while(n--){frontPath = q.front();//vector<string>q.pop();//frontPath出队if(frontPath.size() > level)//下一个level时进入{for(string word:words) wlist.erase(word);//将上一个lv进入路径的单词从集合中删除words.clear();level = frontPath.size();//level+1if(level > minLevel) //如果level比最小的还大,没必要进行下去break;}lastWordOfPath = frontPath.back();for(i = 0; i < lastWordOfPath.size(); i++){   //根据最后一个单词衍生新的单词newLastWord = lastWordOfPath;for(ch = 'a'; ch <= 'z'; ch++){newLastWord[i] = ch;if(!wlist.count(newLastWord)) //新单词不在集合中,下一个continue;words.insert(newLastWord);//在集合中,加入路径,并记录在wordsnewPath = frontPath;//vector<string>newPath.push_back(newLastWord);if(newLastWord == endWord){ans.push_back(newPath);minLevel = level;}elseq.push(newPath);}}}}return ans;}
};

在这里插入图片描述

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

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

相关文章

Dockerfile构建docker镜像注意事项

注意&#xff1a;Dockerfile 的指令每执行一次都会在 docker 上新建一层。所以过多无意义的层&#xff0c;会造成镜像膨胀过大。例如&#xff1a; FROM centos RUN yum install wget RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz&qu…

外卖订单量预测异常报警模型实践

外卖业务的快速发展对系统稳定性提出了更高的要求&#xff0c;每一次订单量大盘的异常波动&#xff0c;都需要做出及时的应对&#xff0c;以保证系统的整体稳定性。如何做出较为准确的波动预警&#xff0c;显得尤为重要。 从时间上看&#xff0c;外卖订单量时间序列有两个明显的…

聊一聊“超大模型”

文 | 金雪锋源 | 知乎最近经常被问&#xff0c;你看“万亿的模型都出来了&#xff0c;你们训练的千亿模型是不是落伍了&#xff1f;”我想说&#xff1a;“虽然都叫超大模型&#xff0c;但是类型是不一样的&#xff0c;虽说每一类模型训出来都不容易&#xff0c;不过澄清一下概…

技术动态 | 不确定性知识图谱的表示和推理

本文转载自漆桂林知乎。作者 | 张嘉韬、漆桂林、吴天星文章链接 | https://zhuanlan.zhihu.com/p/369068016

LeetCode 665. 非递减数列(双指针)

1. 题目 给定一个长度为 n 的整数数组&#xff0c;你的任务是判断在最多改变 1 个元素的情况下&#xff0c;该数组能否变成一个非递减数列。 我们是这样定义一个非递减数列的&#xff1a; 对于数组中所有的 i (1 < i < n)&#xff0c;满足 array[i] < array[i 1]。…

docker build 中的上下文路径

上下文路径 上一节中&#xff0c;有提到指令最后一个 . 是上下文路径&#xff0c;那么什么是上下文路径呢&#xff1f; $ docker build -t nginx:v3 .上下文路径&#xff0c;是指 docker 在构建镜像&#xff0c;有时候想要使用到本机的文件&#xff08;比如复制&#xff09;&a…

数据还是模型?人类知识在深度学习里还有用武之地吗?

文 | Severus编 | 小戏近些年来&#xff0c;随着数据量越来越多&#xff0c;算力价格越来越便宜&#xff0c;根植于数据算力的深度学习茁壮成长。在这种背景下&#xff0c;作为一种强有力的表示学习方法的深度学习让人们惊讶的发现&#xff0c;只要投喂足够多的数据&#xff0c…

HDFS Federation在美团点评的应用与改进

一、背景 2015年10月&#xff0c;经过一段时间的优化与改进&#xff0c;美团点评HDFS集群稳定性和性能有显著提升&#xff0c;保证了业务数据存储量和计算量爆发式增长下的存储服务质量&#xff1b;然而&#xff0c;随着集群规模的发展&#xff0c;单组NameNode组成的集群也产生…

docker compose linux安装以及使用

1 安装 Compose 安装 Linux Linux 上我们可以从 Github 上下载它的二进制包来使用&#xff0c;最新发行的版本地址&#xff1a;https://github.com/docker/compose/releases。 运行以下命令以下载 Docker Compose 的当前稳定版本&#xff1a; $ sudo curl -L "https://g…

LeetCode 130. 被围绕的区域(图的BFS/DFS)

文章目录1. 题目2. 解题2.1 BFS2.2 DFS1. 题目 给定一个二维的矩阵&#xff0c;包含 ‘X’ 和 ‘O’&#xff08;字母 O&#xff09;。 找到所有被 ‘X’ 围绕的区域&#xff0c;并将这些区域里所有的 ‘O’ 用 ‘X’ 填充。 示例: X X X X X O O X X X O X X O X X 运行你的…

论文浅尝 - ECIR2021 | 两种实体对齐方法的严格评估

笔记整理 | 谭亦鸣&#xff0c;东南大学博士生来源: ECIR 2021在这篇工作中&#xff0c;作者对两种SOTA实体对齐方法做了广泛的研究&#xff1a;首先仔细分析了现有benchmark的过程&#xff0c;并论证了其中存在一些缺陷&#xff0c;使得原始方法给出的实验结果之间可能存在不可…

Android App包瘦身优化实践

随着业务的快速迭代增长&#xff0c;美团App里不断引入新的业务逻辑代码、图片资源和第三方SDK&#xff0c;直接导致APK体积不断增长。包体积增长带来的问题越来越多&#xff0c;如CDN流量费用增加、用户安装成功率降低&#xff0c;甚至可能会影响用户的留存率。APK的瘦身已经是…

NLP界新SOTA!吸纳5000万级知识图谱,一举刷爆54个中文任务!

大家还记得2019年底首次将GLUE榜单分数刷过90大关的百度ERNIE模型吗&#xff1f;在随后一年多的时间里&#xff0c;又陆续出现了GPT-3、Switch Transformer等一众靠模型体量取胜的千亿乃至万亿参数规模的超大预训练模型&#xff0c;似乎新训一个预训练模型没有个千亿参数都不好…

LeetCode 543. 二叉树的直径(DFS)

1. 题目 给定一棵二叉树&#xff0c;你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过根结点。 示例 : 给定二叉树1/ \2 3/ \ 4 5 返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。注意&#xff1a;两结点之…

常用命令小记录

常用命令 古月哲亭: docker inspect --format’{{.NetworkSettings.IPAddress}}’ 7f588a2ba93c 查看容器的IP地址 古月哲亭: docker cp eb7728de4c18:/home/CKPE/ckpe_app.py /NLP/digitalDocM/ckpe 古月哲亭: docker run -it -d --name‘nlp_common_ckpe’ -p 11022:4666 …

论文浅尝 | 用于嵌套命名实体识别的二部平面图网络(BiFlaG)

笔记整理 | 栾岱洋&#xff0c;东南大学来源&#xff1a;ACL 2020链接&#xff1a;https://www.aclweb.org/anthology/2020.acl-main.571.pdf本文提出了一种可以实现重叠主体的识别的BiFlaG&#xff08;bipartite flatgraph network&#xff09;模型&#xff0c;包含两个子图模…

不是所有问题都适合用神经网络去搞!

文 | YukiRain知乎不是所有问题都适合用神经网络预测&#xff0c;YukiRain总结了以下几种不适合用神经网络做预测的场景&#xff1a;小样本情况&#xff0c;无论是低维还是高维&#xff0c;不如SVM和贝叶斯模型低维数据&#xff0c;大样本量&#xff0c;不如各种ensemble类算法…

从Google白皮书看企业安全最佳实践

前不久Google发布了一份安全方面的白皮书Google Infrastructure Security Design Overview&#xff0c;直译的版本可以参考“网路冷眼”这版《Google基础设施安全设计概述》&#xff0c;直译点评的版本可以参考“职业欠钱”的《Google基础设施安全设计概述翻译和导读》。 此前G…

python基础入门学习笔记 (2)

python基础入门学习笔记 2021年2月8日 1 编译器和解释器的区别 编译器/解释器&#xff1a;高级语言与机器之间的翻译官 2 值传递&#xff1a; print "a ",a print “a %d” %a 3 查版本 python --version python3 --version 退出&#xff1a; exit() c…

LeetCode 415. 字符串相加(大数加法)

1. 题目 给定两个字符串形式的非负整数 num1 和num2 &#xff0c;计算它们的和。 注意&#xff1a;num1 和num2 的长度都小于 5100. num1 和num2 都只包含数字 0-9. num1 和num2 都不包含任何前导零。 你不能使用任何內建 BigInteger 库&#xff0c; 也不能直接将输入的字符串…