每日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://xiahunao.cn/news/2982365.html

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

相关文章

光伏储能控制系统的功能策略

一、控制策略 1、功率控制策略 光伏阵列的输出功率受光照和温度影响&#xff0c;最大功率点是转换太阳能为电能的最高效点。MPPT控制器根据实时参数调整光伏阵列工作点&#xff0c;确保其始终处于最大功率输出状态&#xff0c;提高能量转换效率&#xff0c;增加发电量&#x…

基于51单片机智能鱼缸仿真LCD1602显示( proteus仿真+程序+设计报告+讲解视频)

基于51单片机智能鱼缸仿真LCD显示 1. 主要功能&#xff1a;2. 讲解视频&#xff1a;3. 仿真4. 程序代码5. 设计报告6. 设计资料内容清单&&下载链接资料下载链接&#xff1a; 基于51单片机智能鱼缸仿真LCD显示( proteus仿真程序设计报告讲解视频&#xff09; 仿真图prot…

免费开源!手机上有这一款软件就够了!

今天这款软件解决了你们最近常问我的资源问题&#xff0c;甚至解决的不是一种&#xff0c;而是好多种&#xff0c;所以这款软件我一定要分享给你&#xff0c;也建议需要这方面软件的小伙伴都去体验一下&#xff0c;说不定就爱上了呢。 01 - 简阅免费小说&#xff08;安卓&#…

低代码信创开发核心技术(四)动态元数据系统设计

一、概述 在当今快速发展的信息技术领域&#xff0c;动态元数据系统扮演着至关重要的角色。它不仅能够提供数据的描述信息&#xff0c;还能动态地适应业务需求的变化&#xff0c;从而提高系统的灵活性和可扩展性。构建一个动态元数据系统意味着我们可以在不重启系统的情况下&a…

CUDA的应用场景

CUDA的应用场景随着技术的发展不断扩展&#xff0c;其核心优势在于能够显著提高并行计算任务的处理速度&#xff0c;这对于任何需要处理大量数据和执行复杂计算的领域都是极其有价值的。CUDA开发的应用场景非常广泛&#xff0c;主要得益于其强大的并行计算能力&#xff0c;以下…

上网行为管理软件有哪些?三款常用上网行为管理软件评测

互联网的普及&#xff0c;企业和个人对于网络安全和信息保护的需求越来越高。为了确保网络环境的安全和稳定&#xff0c;上网行为管理软件应运而生。本文将对三款常用的上网行为管理软件进行评测&#xff0c;分别是域智盾、Splunk Enterprise Security和安企神。 1、域智盾 域…

冯喜运:4.24 周三黄金原油市场分析报告及操作策略

黄金消息面解析&#xff1a;周三(4月24日)黄金反弹后微幅回跌&#xff0c;金价在2325美元附近喘息。尽管美国国债收益率下降&#xff0c;美元走弱&#xff0c;金价未能维持涨势。标普全球PMI弱于预期&#xff0c;引发了对美联储可能降息的猜测。中东地缘紧张局势有所缓解&#…

dist包在windows的nginx下部署运行

nginx 附带下载包 我用夸克网盘分享了「nginx-1.18.0.zip」 链接&#xff1a;https://pan.quark.cn/s/e87bbf87a742 将dist放到html文件目录下 3.找到nginx的配置文件&#xff0c;conf 下&#xff0c;用编辑器打开 nginx.conf 编辑。 location ^~/api {rewrite ^/api/(.*)…

kubernetes中DaemonSet控制器

一、概念 使用DaemonSet控制器&#xff0c;相当于在节点上启动了一个守护进程。通过DaemonSet控制器可以确保在每个节点上运行Pod的一个副本。如果有心的node节点加入集群&#xff0c;则DaemonSet控制器会自动给新加入的节点增加一个Pod的副本&#xff1b;反之&#xff0c;当有…

企业工商信息查询API接口如何对接

企业工商信息查询API接口指的是输入公司名全称/注册号/社会统一信用代码的任意一种&#xff0c;获得企业工商注册登记中包含的各类重要信息&#xff0c;主要信息包括&#xff1a;注册号&#xff0c;注册资金&#xff0c;登记机关&#xff0c;注册地址&#xff0c;核准时间&…

Maven基础篇6

Idea环境中资源上传与下载 具体问题本地仓库如何与私服打交道&#xff1b; 本地仓库向私服上传文件&#xff0c;上传的文件位置在哪里&#xff1f; 访问私服配置相关信息&#xff1a;用户名密码&#xff1b; 下载东西&#xff0c;需要的各种信息&#xff0c;需要的仓库组的…

JavaEE 初阶篇-深入了解网络通信相关的基本概念(三次握手建立连接、四次挥手断开连接)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 网络通信概述 1.1 基本的通信架构 2.0 网络通信三要素 3.0 网络通信三要素 - IP 地址 3.1 查询 IP 地址 3.2 IP 地址由谁供应&#xff1f; 3.3 IP 域名 3.4 IP 分…

H800算力低至5.99元/卡时!抢鲜体验LLaMA3最佳实践就在潞晨云

由Meta发布的LLaMA3 8B和LLaMA3 70B的&#xff0c;将开源AI大模型推向新的高度。在多个基准测试上的表现均大幅超过已有竞品&#xff0c;成为AI应用的最新优选。 潞晨云现已上架 LLaMA3 8B和LLaMA3 70B从推理到微调和预训练的实践教程。 提供免费测试代金券&#xff0c;限时特…

树莓派学习之入门必会操作

树莓派学习之入门指南 一、软件准备二、镜像烧录三、远程登录 一、软件准备 ①raspberry pi image(官方烧录工具&#xff0c;将操作系统烧录到SD卡&#xff0c;SD卡插入树莓派) ②putty(远程登录软件&#xff0c;输入ip,以及username/password就可以远程登录树莓派不带图形化的…

【SMART目标法】项目管理必会的思维分析工具 06

SMART分析方法&#xff0c;是让管理者的工作变被动为主动的一个很好的手段。实施目标管理不但是有利于员工更加明确高效地工作&#xff0c;更是为未来的绩效考核制定了目标和考核标准&#xff0c;使考核更加科学化、规范化&#xff0c;更能保证考核的公开、公平与公正。 “sma…

嵌入式MCU和SOC的区别?

你大概率并不知晓嵌入式 MCU 与 SOC 之间的区别吧&#xff1f;从表面上来看&#xff0c;MCU 指代的是嵌入式微控制器&#xff0c;而 SOC 则代表着片上系统&#xff0c;这仿佛仅仅是嵌入式系统的不同称谓罢了。然而&#xff0c;在实际的研发以及产品设计过程中&#xff0c;你将会…

【算法刷题 | 贪心算法02】4.24(摆动序列)

文章目录 3.摆动序列3.1题目3.2解法&#xff1a;贪心3.2.1贪心思路3.2.2代码实现 3.摆动序列 3.1题目 如果连续数字之间的差严格地在正数和负数之间交替&#xff0c;则数字序列称为 摆动序列 。 第一个差&#xff08;如果存在的话&#xff09;可能是正数或负数。仅有一个元素…

docker-compose搭建redis环境:哨兵模式(一主两重两哨兵)

文章目录 0.BG1. 编写docker-compose.yml文件2. 哨兵配置文件sentinel.conf3.启动容器4.模拟故障转移 0.BG redis环境有多中模式&#xff0c;包括Standalone&#xff0c;Cluster和Sentinel模式等。这里介绍一种简单搭建Sentinel模式的方法&#xff0c;搭建一个一主两重两哨兵的…

一文速览Llama 3及其微调:如何通过paper-review数据集微调Llama3 8B

前言 4.19日凌晨正准备睡觉时&#xff0c;突然审稿项目组的文弱同学说&#xff1a;Meta发布Llama 3系列大语言模型了 一查&#xff0c;还真是 本文以大模型开发者的视角&#xff0c;基于Meta官方博客的介绍&#xff1a;Introducing Meta Llama 3: The most capable openly a…

vue中web端播放rtsp视频流(摄像头监控视频)(海康威视录像机)

一、ffmpeg安装​​​​​​ ffmpeg下载 https://ffmpeg.org/download.html找ffmpeg-release-essentials.zip点击下载&#xff0c;下载完解压ffmpeg.exe 程序运行 二、配置ffmpeg环境变量 添加成功后验证是否生效任意地方打开cmd窗口输入 ffmpeg 打印如下表示成功 三、node…