【python-leetcode269-拓扑排序】火星字典
发布时间:2020-12-20 09:54:26 所属栏目:Python 来源:网络整理
导读:现有一种使用字母的全新语言,这门语言的字母顺序与英语顺序不同。假设,您并不知道其中字母之间的先后顺序。但是,会收到词典中获得一个 不为空的 单词列表。因为是从词典中获得的,所以该单词列表内的单词已经 按这门新语言的字母顺序进行排序。您需要根据
现有一种使用字母的全新语言,这门语言的字母顺序与英语顺序不同。假设,您并不知道其中字母之间的先后顺序。但是,会收到词典中获得一个 不为空的 单词列表。因为是从词典中获得的,所以该单词列表内的单词已经 按这门新语言的字母顺序进行排序。您需要根据这个输入的列表,还原出此语言中已知的字母顺序。 输入: [ "wrt","wrf","er","ett","rftt" ] 输出: 正确的顺序是:“wertf” ? 解题:意思是按照单词的顺序排序了。比如wrt和wrf,wrt排在wrf前面,说明优先级t>f,依次类推则有: t->f w->e r->t e->r 最终则有顺序:wertf 比较麻烦的就是如何转换成字符间的顺序格式,之后用拓扑排序就好了。 class Solution: def alienOrder(self,words): #chars用于获取字母集合 chars=set(''.join(words)) print(chars) 用于存储入度 degrees={x:0 for x in chars} from collections import defaultdict 用于存储优先级 graph=defaultdict(list) pair是从上到下两两匹对 for pair in zip(words,words[1:]): (pair) x,y依次取出匹对的字母 for x,y in zip(*pair): (x,y) if x!=y: 建立优先级关系 graph[x].append(y) 入度增加1 degrees[y]+=1 break (degrees) (graph) queue=[] for i chars: if degrees[i] == 0: queue.append(i) res="" while queue: x=queue.pop(0) res+=x graph[x]: degrees[i]-=1 if degrees[i]==0: queue.append(i) return res*(set(res)==chars) s=Solution() (s.alienOrder([ "wrt",wrferettrftt ])) 结果: 第二种方法:使用深度优先遍历 (graph) lis= 0: lis.append(i) res= lis: tmp=[] for ch lis: res+=ch for c graph[ch]: degrees[c]-=1 if degrees[c]==0: tmp.append(c) del graph[ch] lis=tmp return res if len(res)==len(chars) else "" s= ])) ? 参考:https://www.jianshu.com/p/ee280c838f2d (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- python – tkFileDialog的askopenfilename方法中的默认文
- 如何将数据集拆分/分区为训练和测试数据集,例如交叉验证?
- pip升级后提示错误ImportError: cannot import name main
- 如何在保存所有键值信息的同时从python中的两个列表创建字典
- Python参考手册(第4版)(高清版)PDF
- python – 读取大型excel表(猜测大小)
- 如何使用Python获取网站的协议(http或https)
- day89:luffy:使用Celery完成我的订单超时取消&Polyv视频
- 在python中打印出c类型的二进制表示
- python – Pandas按多列排名