Leetcode 269. 火星词典

article/2025/7/20 23:08:22

1.题目基本信息

1.1.题目描述

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

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

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

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

  • 在第一个不同字母处,如果 s 中的字母在这门外星语言的字母顺序中位于 t 中字母之前,那么 s 的字典顺序小于 t 。

  • 如果前面 min(s.length, t.length) 字母都相同,那么 s.length < t.length 时,s 的字典顺序也小于 t 。

1.2.题目地址

https://leetcode.cn/problems/alien-dictionary/description/

2.解题方法

2.1.解题思路

kahn算法 / DFS

2.2.解题步骤

kahn算法进行拓扑排序步骤

  • 第一步,根据"有序"的words数组构建各个字符之间的有向图,使用邻接表进行存储;并在建图的过程中统计各个结点的入度信息到inDegree哈希表中

    • 1.1.将所有字符都初始化到图中,并初始化它们入度为0

    • 1.2.遍历相邻单词组,构建图,并填充入度到inDegree哈希表

      • 1.2.1.将边添加到图中

      • 1.2.2.统计入度

      • 1.2.3.word1和word2的前缀相同且word1的长度大于word2的长度是不合法的情况,直接返回空字符串

  • 第二步,kahn算法进行拓扑排序。先判断图中是否有环,如果无环,返回任意一个拓扑排序的序列,如果有环,返回空字符串

    • 2.1.将入度为0的结点添加到队列中,并初始化拓扑排序序列数组

    • 2.2.kahn算法进行拓扑排序

  • 第三步,如果inDegree中所有结点的入度都为0,说明无环

DFS算法步骤

  • 第一步,构建出现的字母集合

  • 第二步,构建有向图的邻接表和入度字典

  • 第三步,DFS进行拓扑排序

3.解题代码

kahn算法版本代码

from collections import defaultdict, dequeclass Solution:def alienOrder(self, words: List[str]) -> str:# 思路:拓扑排序# 第一步,根据"有序"的words数组构建各个字符之间的有向图,使用邻接表进行存储;并在建图的过程中统计各个结点的入度信息到inDegree哈希表中graph = defaultdict(list)inDegree = defaultdict(int)# 1.1.将所有字符都初始化到图中,并初始化它们入度为0charsSet = set()for w in words:for c in w:charsSet.add(c)for c in charsSet:graph[c] = []inDegree[c] = 0# 1.2.遍历相邻单词组,构建图,并填充入度到inDegree哈希表n = len(words)for i in range(1, n):word1, word2 = words[i - 1], words[i]j = 0length1, length2 = len(word1), len(word2)while j < min(length1, length2):if word1[j] != word2[j]:# 1.2.1.将边添加到图中graph[word1[j]].append(word2[j])# 1.2.2.统计入度inDegree[word2[j]] += 1breakj += 1# 1.2.3.word1和word2的前缀相同且word1的长度大于word2的长度是不合法的情况,直接返回空字符串if j == min(length1, length2) and length1 > length2:return ""# print(graph)# print(inDegree)# 第二步,kahn算法进行拓扑排序。先判断图中是否有环,如果无环,返回任意一个拓扑排序的序列,如果有环,返回空字符串# 2.1.将入度为0的结点添加到队列中,并初始化拓扑排序序列数组arr = []    # 拓扑排序的序列que = deque()for node in graph.keys():if inDegree[node] == 0:que.append(node)arr.append(node)# 2.2.kahn算法进行拓扑排序while que:for _ in range(len(que)):node = que.popleft()del inDegree[node]for neighNode in graph[node]:inDegree[neighNode] -= 1if inDegree[neighNode] == 0:que.append(neighNode)arr.append(neighNode)# print(inDegree, arr)# 第三步,如果inDegree中所有结点的入度都为0,说明无环result = "".join(arr) if len(inDegree) == 0 else ""return result

dfs算法版本代码

from collections import defaultdict, dequeclass Solution:# 思路一:DFSdef alienOrder(self, words: List[str]) -> str:length=len(words)# 构建出现的字母集合lettersSet=set()for word in words:for letter in word:lettersSet.add(letter)# 构建图、入度字典graph={letter:[] for letter in lettersSet}inDict=defaultdict(int)for i in range(1,length):preWord=words[i-1]word=words[i]isNormalEnd=Truefor preLetter,letter in zip(preWord,word):# print(preLetter,letter)if preLetter!=letter:graph[preLetter].append(letter)inDict[letter]+=1isNormalEnd=Falsebreakif isNormalEnd:# print("t4",preWord,word)if len(preWord)>len(word):return ""# print("t1",graph,inDict,lettersSet)# dfsvisiting=set()visited=set()stack=[]# 返回True代表无环def dfs(node):if node in visited:return Trueif node in visiting:return Falsevisiting.add(node)for subNode in graph[node]:noCircle=dfs(subNode)if not noCircle:return Falsevisiting.remove(node)visited.add(node)stack.append(node)return Truefor node in list(graph.keys()):noCircle=dfs(node)if not noCircle:return ""return "".join(stack[::-1])

4.执行结果


http://www.hkcw.cn/article/BsHKSAggVK.shtml

相关文章

若依框架-Feign的应用

代码资料链接&#xff1a;https://download.csdn.net/download/ly1h1/90945836 1.背景 若依的微服务框架&#xff0c;少不了各微服务之间的接口调用&#xff0c;以下是采用feign来进行微服务之间的方法调用。 2.案例说明 在system模块下的某个接口&#xff0c;调用factory&am…

印度奥迪沙邦一巴士翻车 50余人被困 紧急救援展开

6月2日,一辆巴士在印度东部奥迪沙邦的山路上发生翻车事故,车内50多名乘客被困。事故发生在当天清晨,巴士在下坡过程中于弯道上失去平衡,导致车辆失控。事故发生后,当地村民和紧急救援人员迅速展开救援行动,当地政府也派出救援队赶往现场。目前,官方尚未公布具体的伤亡情…

从4小时到20分钟 青岛港科技升级货物“秒通关”

作为中国北方重要的国际航运枢纽,青岛港的航线通达全球700多个港口,一季度集装箱吞吐量同比增速达到了7.4%。在当下复杂多变的国际贸易形势下,这座港口如何找准方向为外贸企业“保驾护航”?港口“流量”剧增折射外贸新机遇在山东港口青岛港前湾港区,这艘前往美国东部的集装…

Flannel MAC地址冲突导致Pod 跨节点通信异常

问题背景 客户在扩容 Kubernetes 节点后&#xff0c;发现部分服务 Pod 跨节点通信异常&#xff0c;表现为&#xff1a; • Pod 间通信间歇性失败&#xff1b; • 某些业务服务异常或响应慢&#xff1b; • 怀疑是网络问题引起的。 问题排查 1️⃣ 初步排查网络路由信息 我们…

[前端计算机网络]资源加载过程的详细性能信息浏览器加载资源的全过程

资源加载过程的详细性能信息 基于 PerformanceResourceTiming 对象对页面中某个资源加载过程的详细性能信息进行采集与封装&#xff0c;并结合了计算机网络中的请求生命周期进行度量。 export function observeEvent():void{const type"resource";const entryHand…

德布劳内将接受那不勒斯体检 加盟在即

据报道,德布劳内将加盟那不勒斯。预计他将在比利时国家队比赛结束后接受那不勒斯的体检。上月公布的比利时世预赛名单中包括了德布劳内。比利时队将在世预赛中先后对阵北马其顿和威尔士,其中与威尔士的比赛将于本月10日北京时间2点45分开球。现年33岁的德布劳内在今夏合同到期…

《在人间》是2025最难看懂的剧吗 烧脑剧情挑战观众

《在人间》这部剧集让艺绽君感到难以评价。这种“难评”并非贬义,而是因为观剧过程中真实地感受到了大脑爆炸、脑细胞死了不少,只能用一个相对中立的词汇来形容这部“神剧”。《在人间》共8集,隶属于爱奇艺的微尘剧场,这一剧场以短小精悍的作品著称。主创团队中有知名导演兼…

警方辟谣北京有人高空撒一千万:不是故意的,系工人施工碰倒钱箱 干活不慎掉落

5月29日,北京昌平区住总万科天地一带发生了一起撒钱事件。有市民发帖称,有人在楼上撒了一千万元。视频画面显示,空中飘着几张纸币,一些市民在楼下接钱。次日,北京七里渠派出所工作人员表示,当事人是因为工作时不小心掉落了钱,并提醒市民不要听信网络谣言。至于掉落的金钱…

96岁老兵走失找回 曾为陈毅元帅送信 抗战英雄平安归家

6月2日,山东省济宁市一救援队成功找回了走失的96岁高龄抗战老兵吕企荣老人,老人身体无碍。吕企荣家住泗水县济河街道何家庄村。5月31日早晨7时许,老人从家中步行到村北侧的小公园遛弯,直到中午都没有回家。家属通过监控发现,老人沿着城区北侧万象城附近道路一直向北走,直…

地磁暴雷暴大风与暴雨交织登场 双预警齐发

6月2日6时,中央气象台发布暴雨蓝色预警和强对流天气蓝色预警,覆盖福建、广东、广西等十余省份。中国气象局国家空间天气监测预警中心指出,6月1日至3日可能连续发生地磁暴,6月2日左右,我国北部有机会出现较为明显的极光,部分地区甚至有出现红绿复合极光的可能。预计6月2日…

6月1日起 新疆伊尔克什坦口岸试行24小时货运通关

6月1日,新疆伊尔克什坦口岸货运通道正式启动为期6个月的24小时通关试行。随着首批出入境货车有序通关,该口岸成为中国首个面向吉尔吉斯斯坦实行24小时货运通关的公路口岸。伊尔克什坦口岸位于新疆克孜勒苏柯尔克孜自治州乌恰县,是我国最西端的陆路口岸。口岸主要出口日用百货…

美防长炒作中国威胁论难获东盟支持 东盟强调战略自主

在新加坡举行的第22届香格里拉对话会上,美国国防部长赫格塞思极力渲染所谓的“中国威胁”,以迫使盟国增加军费开支。然而,东盟国家的国防部长们强调了“战略自主”的概念。菲律宾国防部长吉尔伯特特奥多罗表示,菲律宾作为美国的条约盟友,并非没有战略自主的棋子。他虽然仍…

Python 训练营打卡 Day 32-官方文档的阅读

我们已经掌握了相当多的机器学习和python基础知识&#xff0c;现在面对一个全新的官方库&#xff0c;看看是否可以借助官方文档的写法了解其如何使用 我们以pdpbox这个机器学习解释性库来介绍如何使用官方文档 以鸢尾花三分类项目来演示如何查看官方文档 import pandas as pd…

USB子系统和type-c接口快速理解

USB子系统 USB硬件基础 在了解LINUX 的USB驱动之前&#xff0c;我们肯定是要了解相关硬件内容的&#xff0c;如下给出了三种常用的USB接口。 特性 Type A (2.0) Type A 3.0 Type C 接口形状 长方形&#xff0c;单向插入 与 Type A 2.0 相同 椭圆形&#xff0c;可双…

DQN和DDQN(进阶版)

来源&#xff1a; *《第五章 深度强化学习 Q网络》.ppt --周炜星、谢文杰 一、前言 Q表格、Q网络与策略函数 Q表格是有限的离散的&#xff0c;而神经网络可以是无限的。 对于动作有限的智能体来说&#xff0c;使用Q网络获得当下状态的对于每个动作的 状态-动作值 。那么 a…

新视讯影视官网入口,影视动漫在线播放网站

新视讯影视是一个免费为广大追剧迷提供在线播放服务的影视平台&#xff0c;深受众多影视爱好者的喜爱。它涵盖了大量免费的VIP电视剧资源、最新上映的大片、好看的综艺节目以及动漫视频&#xff0c;是一个播放速度快、资源多的免费影视网站。用户无需注册或登录&#xff0c;即可…

张家界溶洞垃圾已清运2.7吨 排污事件引发关注

近日,有网友反映张家界市慈利县一处天然溶洞遭到人为排污,导致溶洞被污染。相关话题引发了广泛关注。据慈利县融媒体中心6月1日发布的最新视频,经过7天的努力,杨家坡溶洞内的垃圾已清理打捞出2.7吨。相关视频显示,溶洞内垃圾正在被装袋并通过吊机吊出,旁边已经摆放着大量…

杭州机场迎首批入境旅客 免签新政促便利

6月1日下午,杭州口岸迎来了首批享受免签新政的南美洲旅客。为便利中外人员往来,中方决定扩大免签国家范围,自2025年6月1日起至2026年5月31日,巴西、阿根廷、智利、秘鲁、乌拉圭五个国家持普通护照的人员来华经商、旅游观光、探亲访友、交流访问或过境不超过30天,可免办签证…

余承东为何“炮轰”友商 华为销量不及小米

华为终端BG董事长余承东在2025未来汽车先行者大会上提到,有一家公司仅凭一款车型就取得了巨大成功。尽管该公司的产品质量和智能驾驶能力并不出色,但凭借强大的品牌影响力和流量支持,依然实现了热销。余承东表示,华为的产品在质量、体验和性能方面都优于这家公司,但在销量…

患者服临床试验抗癌药致重症肺炎 临床研究用药疑云

在重庆39度的高温天气里,刘呈富推着轮椅艰难地爬坡过坎,汗流浃背,呼吸短促。坐在轮椅中的李忠美怀里抱着30多斤重的制氧机,拖着枕头状氧气袋,同样疲惫不堪。李忠美是一位45岁的宫颈癌患者,抗癌已有12年。2023年她的病情再次复发,医生推荐她使用一种名为卡度尼利单抗的注…