每日OJ题_BFS解决拓扑排序③_力扣LCR 114. 火星词典

目录

力扣LCR 114. 火星词典

解析代码


力扣LCR 114. 火星词典

LCR 114. 火星词典

难度 困难

现有一种使用英语字母的外星文语言,这门语言的字母顺序与英语顺序不同。

给定一个字符串列表 words ,作为这门语言的词典,words 中的字符串已经 按这门新语言的字母顺序进行了排序 。

请你根据该词典还原出此语言中已知的字母顺序,并 按字母递增顺序 排列。若不存在合法字母顺序,返回 "" 。若存在多种可能的合法字母顺序,返回其中 任意一种 顺序即可。

字符串 s 字典顺序小于 字符串 t 有两种情况:

  • 在第一个不同字母处,如果 s 中的字母在这门外星语言的字母顺序中位于 t 中字母之前,那么 s 的字典顺序小于 t 。
  • 如果前面 min(s.length, t.length) 字母都相同,那么 s.length < t.length 时,s 的字典顺序也小于 t 。

示例 1:

输入:words = ["wrt","wrf","er","ett","rftt"]
输出:"wertf"

示例 2:

输入:words = ["z","x"]
输出:"zx"

示例 3:

输入:words = ["z","x","z"]
输出:""
解释:不存在合法字母顺序,因此返回 "" 。

提示:

  • 1 <= words.length <= 100
  • 1 <= words[i].length <= 100
  • words[i] 仅由小写英文字母组成
class Solution {
public:string alienOrder(vector<string>& words) {}
};

解析代码

将题意理解清楚之后,这道题就变成了判断有向图是否有环,可以用拓扑排序解决。

如何如搜集信息(何建图):

  1. 两层 for 循环枚举出所有的两个字符串的组合。
  2. 然后利用指针,根据字典序规则找出信息。
class Solution {unordered_map<char, unordered_set<char>> edges; // 邻接表unordered_map<char, int> in; // 统计入度信息bool flag; // 处理边界情况, 类似str1 = a, b, c && str2 = a, bpublic:string alienOrder(vector<string>& words) {for(auto& str : words) // 初始化入度哈希表{for(auto& ch : str){in[ch] = 0;}}int sz = words.size();for(int i = 0; i < sz; ++i) // 建图{for(int j = i + 1; j < sz; ++j){Add(words[i], words[j]);if(flag) // 不合法return "";}}queue<char> q; // 拓扑排序for(auto& [a, b] : in) // 入度为0的点入队列{if(b == 0)q.push(a);}string ret;while(!q.empty()){char tmp = q.front();q.pop();ret += tmp;for(auto& ch : edges[tmp]) // 度为0的点指向的点的度减1{if(--in[ch] == 0)q.push(ch);}}for(auto& [a, b] : in) // 返回{if(b != 0)return "";}return ret;}void Add(string& str1, string& str2) // 收集信息{int sz = min(str1.size(), str2.size()), i = 0;for(; i < sz; ++i){if(str1[i] != str2[i]){char a = str1[i], b = str2[i]; // 前大后小if(!edges.count(a) || !edges[a].count(b)) // 防止存入重复信息   {edges[a].insert(b);  // a -> bin[b]++;}break;}}if(i == str2.size() && i < str1.size())flag = true; // 类似str1 = a, b, c && str2 = a, b}
};

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

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

相关文章

十五、Java中I/O流

1、流的基本概念 1)流的概念 流:在Java中所有的数据都是使用流读写的。流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质就是数据传输,根据数据传输特性将流抽象为各种类。 (1)按照流向分:输入流、输出流。…

网络靶场实战-物联网安全qiling框架初探

背景 Qiling Framework是一个基于Python的二进制分析、模拟和虚拟化框架。它可以用于动态分析和仿真运行不同操作系统、处理器和体系结构下的二进制文件。除此之外&#xff0c;Qiling框架还提供了易于使用的API和插件系统&#xff0c;方便使用者进行二进制分析和漏洞挖掘等工作…

【求助】西门子S7-200PLC定时中断+数据归档的使用

前言 已经经历了种种磨难来记录我的数据&#xff08;使用过填表程序、触摸屏的历史记录和数据归档&#xff09;之后&#xff0c;具体可以看看这篇文章&#xff1a;&#x1f6aa;西门子S7-200PLC的数据归档怎么用&#xff1f;&#xff0c;出现了新的问题。 问题的提出 最新的…

网工交换基础——生成树协议(01)

一、生成树的技术概述 1、技术背景 二层交换机网络的冗余性导致出现二层环路&#xff1a; 人为因素导致的二层环路问题&#xff1a; 二层环路带来的网络问题&#xff1a; 生成树协议的概念&#xff1a; STP(Spanning Tree Protocol)是生成树协议的英文缩写。该协议可应用于在网…

代码随想录算法训练营第三十七天| 738.单调递增的数字,968.监控二叉树

目录 题目链接&#xff1a;738.单调递增的数字 思路 代码 题目链接&#xff1a;968.监控二叉树 思路 代码 总结 题目链接&#xff1a;738.单调递增的数字 思路 既然是求单调递增的数字&#xff0c;要判断相邻数字之间的大小关系。有两种遍历顺序&#xff0c;从前往后和从…

面向对象练习坦克大兵游戏

游戏玩家&#xff08;名称&#xff0c;生命值&#xff0c;等级&#xff09;&#xff0c;坦克&#xff0c;大兵类&#xff0c;玩家之间可以相互攻击&#xff0c;大兵拥有武器&#xff0c;用枪弹和反坦克炮弹&#xff0c;造成攻击不同&#xff0c;坦克攻击值固定&#xff0c;请设…

设计模式-六大原则

设计模式的六大原则是软件工程中的基本概念&#xff0c;使得构建可维护、可扩展和可重用的代码。 1.单一职责原则&#xff08;Single Responsibility Principle&#xff09;&#xff1a;一个类或方法应该只有一个引起变化的原因&#xff0c;确保类或模块的功能高度内聚。 案例&…

VMware-Linux切换桥接模式上网教程(超详细)

这里写目录标题 1. 虚拟机关机2. VMware 虚拟网络配置2.1 检查是否存在 VMnet02.2 修改桥接模式2.3 修改Linux虚拟机网络适配器 3. Linux 系统配置3.1 修改系统网卡配置3.1.1 配置项含义解释3.1.2 查看物理机网络信息3.3.3 修改配置 3.2 重启服务 4. 测试网络连接情况5. 注意事…

如何看待AIGC技术?

AIGC原名&#xff08;Artificial Intelligence Generated Content&#xff09; 技术是一种利用人工智能来自动生成内容的技术&#xff0c;这包括文本、图像、音频和视频等多种形式的创作。AIGC技术的发展标志着人工智能从1.0时代进入2.0时代的重大转变&#xff0c;它不仅体现了…

多线程优化人脸识别时遇到的问题

项目&#xff1a; face 遇到的问题&#xff1a; 其中一个线程报错&#xff0c;然后不返回相应的数据信息 问题思考&#xff1a; 每个线程独立执行&#xff0c;当其中一个线程报错后&#xff0c;随之这个线程不往下执行&#xff0c;但是其他线程还是正确执行的。 解决&…

【SpringBoot整合系列】SpringBoot整合JPA

目录 前期回顾ORM解决方案 JPA简介JPA的组成技术ORM映射元数据Java持久化API查询语言&#xff08;JPQL&#xff09; JPA的优势JPA的缺点 Spring Data JPASpring Data JPA简介Spring Data 家族Spring Data JPA、JPA和其他框架之间的关系 SpringBoot整合JPAJPA的核心注解1.依赖2.…

element-ui upload 组件 手动多次出发 submit

element 上传组件 upload 上传成功以后&#xff0c;想重新 调用 submit()函数&#xff0c;发现是不可以进行多次触发的,。 直接上解决方法&#xff0c;在上传成功后的钩子函数里添加:fileList[0l.status ready fileList是文件列表&#xff0c;status是单文件的状态改成ready就…

【Fastadmin】表格导出excel,图片显示太大

目录 1.直接导出示例 2.解决办法 3. 再次导出效果 1.直接导出示例 图片过大&#xff0c;格式错乱 2.解决办法 在js页面加入代码 // 导出图片过大处理 exportOptions: {ignoreColumn: [0, operate],onBeforeSaveToFile: function (data, fileName, type, charset, encoding,…

《深入Linux设备驱动程序内核机制》学习笔记-第4章

前言 本文是《深入Linux设备驱动程序内核机制》的读书笔记&#xff0c;本文因为是读书笔记所以抄写引用了该书中的大量内容&#xff0c;写读书笔记的目的是在写作的过程中加深对书中内容的理解。 建议读者直接阅读《深入Linux设备驱动程序内核机制》&#xff0c;这本书是Linu…

代码随想录三刷day47

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、力扣115. 不同的子序列二、力扣583. 两个字符串的删除操作三、力扣72. 编辑距离 前言 本周我们讲了动态规划之终极绝杀&#xff1a;编辑距离&#xff0c;为…

阿里云服务器部署wordpress站点

步骤如下&#xff1a; 安装宝塔登录宝塔&#xff0c;安装wordpress环境新建站点&#xff0c;新建的时候只输入ip地址就可以&#xff0c;再创建一个数据库dev1在站点文件夹中传入wordpress&#xff0c;更改站点的配置文件&#xff0c;将工作目录xxx改成xxx/wordpress修改wordpr…

浅谈 操作系统

文章目录 一、什么是操作系统1.1、对下&#xff0c;要管理各种硬件设备1.2、对上&#xff0c;要给各种软件提供一个稳定的运行环境 二、常见的操作系统有哪些 一、什么是操作系统 操作系统 其实就是一个 软件(software)。是一个用来进行 管理 的软件。进行什么样的管理呢&…

mPEG-Dansyl,Methoxy PEG Dansyl由甲氧基-聚乙二醇(mPEG)和丹磺酰氯(Dansyl)两部分组成

【试剂详情】 英文名称 mPEG-Dansyl&#xff0c;Methoxy PEG Dansyl 中文名称 聚乙二醇单甲醚丹磺酸酯&#xff0c;甲氧基-聚乙二醇-丹磺酰胺 外观性状 由分子量决定&#xff0c;液体或者固体 分子量 0.4k&#xff0c;0.6k&#xff0c;1k&#xff0c;2k&#xff0c;3.4k…

OceanBase v4.2 特性解析:Auto DOP

我们常会使用并行执行来缩短查询时间&#xff0c;以满足业务对加速查询的需求。那么&#xff0c;如何确定合适的并行资源量呢&#xff1f;在优化器中&#xff0c;并行资源量可以通过并行度&#xff08;DOP&#xff1a;Degree of Parallelism&#xff09;这来衡量。在实际业务场…

前端发送请求,显示超时取消

前端发送请求&#xff0c;显示超时取消 问题说明&#xff1a;后台接口请求60s尚未完成&#xff0c;前端控制台显示取消&#xff08;canceled&#xff09; 原因 1、前端设置60s超时则取消 2、后台接口响应时间过长&#xff0c;过长的原因统计的数据量多&#xff08;实际也才17…