LeetCode 269. 火星词典(拓扑排序)

文章目录

    • 1. 题目
    • 2. 解题

1. 题目

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

假设,您并不知道其中字母之间的先后顺序。
但是,会收到词典中获得一个 不为空的 单词列表。
因为是从词典中获得的,所以该单词列表内的单词已经 按这门新语言的字母顺序进行了排序。

您需要根据这个输入的列表,还原出此语言中已知的字母顺序。

示例 1:
输入:
["wrt","wrf","er","ett","rftt"
]
输出: "wertf"示例 2:
输入:
["z","x"
]
输出: "zx"示例 3:
输入:
["z","x","z"
] 
输出: "" 
解释: 此顺序是非法的,因此返回 ""。提示:
你可以默认输入的全部都是小写字母
若给定的顺序是不合法的,则返回空字符串即可
若存在多种可能的合法字母顺序,请返回其中任意一种顺序即可

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

2. 解题

参考:图Graph–拓扑排序(Topological Sorting)

  • 建立第一个不相同的字符之间的有向图的边
  • 记录节点的入度,把入度为0的点入队BFS
class Solution {
public:string alienOrder(vector<string>& words) {unordered_set<char> allchar;for(string& w : words){for(char ch : w)allchar.insert(ch);}//记下所有的字符unordered_map<char,int> indegree;unordered_map<char,unordered_set<char>> graph;int n1, n2, n;for(int i = 1, j; i < words.size(); ++i){	if(words[i-1] == words[i])continue;n1 = words[i-1].size();n2 = words[i].size();n = min(n1, n2);for(j = 0; j < n; ++j){if(words[i-1][j] != words[i][j]){	//不相等的第一个构成有向图的边if(!graph.count(words[i-1][j]) || !graph[words[i-1][j]].count(words[i][j])){   //防止重复添加同一条边 "za","zb","ca","cb"graph[words[i-1][j]].insert(words[i][j]);indegree[words[i][j]]++;indegree[words[i-1][j]] += 0;}break;}}if(j == n && n1 > n2)return "";//前面相等,前者长不行}queue<char> q;for(auto it = indegree.begin(); it != indegree.end(); ++it){if(it->second == 0)//入度为0的入队q.push(it->first);}string ans;while(!q.empty()){char ch = q.front();allchar.erase(ch);q.pop();ans += ch;for(auto it = graph[ch].begin(); it != graph[ch].end(); ++it){if(--indegree[*it] == 0)q.push(*it);}}if(ans.size() != indegree.size())return "";//有环while(allchar.size()){	//剩余字符随便放ans += *allchar.begin();allchar.erase(allchar.begin());}return ans;}	
};

4 ms 7.2 MB


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
Michael阿明

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

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

相关文章

LeetCode 301. 删除无效的括号(回溯)

文章目录1. 题目2. 解题1. 题目 删除最小数量的无效括号&#xff0c;使得输入的字符串有效&#xff0c;返回所有可能的结果。 说明: 输入可能包含了除 ( 和 ) 以外的字符。 示例 1: 输入: "()())()" 输出: ["()()()", "(())()"]示例 2: 输入:…

javascript数组去重方法性能测试比较

昨天参加的一个前端面试&#xff0c;其中有一题数组去重&#xff0c;首先想到的是对象存键值的方法&#xff0c;代码如下 方法一&#xff1a;&#xff08;简单存键值&#xff09; Array.prototype.distinct1 function() {var i0,tmp{},thatthis.slice(0)this.length0;for(;i&l…

LeetCode 428. 序列化和反序列化 N 叉树(DFS)

文章目录1. 题目2. 解题1. 题目 序列化是指将一个数据结构转化为位序列的过程&#xff0c;因此可以将其存储在文件中或内存缓冲区中&#xff0c;以便稍后在相同或不同的计算机环境中恢复结构。 设计一个序列化和反序列化 N 叉树的算法。 一个 N 叉树是指每个节点都有不超过 N…

计算机进入休眠状态后,Win7电脑进入休眠状态后又自动重启该怎么处理

在使用win7系统的时候&#xff0c;有的小伙伴遇到了一个莫名其妙的问题&#xff1a;当电脑进入休眠状态后却突然自动重启了&#xff0c;那么这是怎么一回事呢&#xff1f;又该如何解决呢&#xff1f;别着急&#xff0c;接下来&#xff0c;小编就给大家分享一下Win7电脑进入休眠…

LeetCode 325. 和等于 k 的最长子数组长度(哈希表记录第一次出现的状态)

文章目录1. 题目2. 解题1. 题目 给定一个数组 nums 和一个目标值 k&#xff0c;找到和等于 k 的最长子数组长度。 如果不存在任意一个符合要求的子数组&#xff0c;则返回 0。 注意: nums 数组的总和是一定在 32 位有符号整数范围之内的。 示例 1: 输入: nums [1, -1, 5, -…

测试网上哪款软件最好,手机测试软件哪款好用?4款测试软件推荐

手机强不强测试上见真章&#xff01;不服测个试呗&#xff01;虽不能代表作手机的品质&#xff0c;但可以直观的反馈出手机硬件性能。通过专业的手机测试软件可以对手机硬件进行评分&#xff0c;了解手机每个硬件性能情况。鲁大师&#xff1a;《鲁大师》是一款支持Android、平板…

LeetCode 218. 天际线问题(multiset优先队列)*

文章目录1. 题目2. 解题1. 题目 城市的天际线是从远处观看该城市中所有建筑物形成的轮廓的外部轮廓。 现在&#xff0c;假设您获得了城市风光照片&#xff08;图A&#xff09;上显示的所有建筑物的位置和高度&#xff0c;请编写一个程序以输出由这些建筑物形成的天际线&#x…

LeetCode 277. 搜寻名人(思维题)

文章目录1. 题目2. 解题2.1 暴力解2.2 高效解1. 题目 假设你是一个专业的狗仔&#xff0c;参加了一个 n 人派对&#xff0c;其中每个人被从 0 到 n - 1 标号。 在这个派对人群当中可能存在一位 “名人”。 所谓 “名人” 的定义是&#xff1a;其他所有 n - 1 个人都认识他/她&…

最近很火的计算机歌曲,抖音日活跃用户数超4亿 2019年度最火音乐竟是它

抖音今日发布《2019抖音数据报告》(以下简称报告)&#xff0c;报告显示&#xff0c;截至2020年1月5日&#xff0c;抖音日活跃用户数超过4亿。根据报告&#xff0c;抖音上不同年龄段用户最爱拍摄的内容不尽相同&#xff0c;00后喜欢拍摄二次元相关视频&#xff0c;90后用户喜欢拍…

LeetCode 432. 全 O(1) 的数据结构(设计题)*

文章目录1. 题目2. 解题1. 题目 请你实现一个数据结构支持以下操作&#xff1a; Inc(key) - 插入一个新的值为 1 的 key。 或者使一个存在的 key 增加一&#xff0c;保证 key 不为空字符串。Dec(key) - 如果这个 key 的值是 1&#xff0c;那么把他从数据结构中移除掉。 否则使…

vs2010 rdlc 报表及报表控件

有个winfrom项目要使用报表&#xff0c;数据来源于自定义类&#xff08;model&#xff09;&#xff0c;从网上找了好多教程&#xff0c;都是说如何拖控件&#xff0c;如何设值之类的。没有我想要的效果。 我想要的效果&#xff1a;将rdlc文件放到Debug目录下&#xff0c;以便一…

设置 NSZombieEnabled 定位 EXC_BAD_ACCESS 错误

http://unmi.cc/nszombieenabled-locate-exc_bad_access-error, 来自 隔叶黄莺 Unmi Blog 我们做 iOS 程序开发时经常用遇到 EXC_BAD_ACCESS 错误导致 Crash&#xff0c;出现这种错误时一般 Xcode 不会给我们太多的信息来定位错误来源&#xff0c;只是在应用 Delegate 上留下像…

LeetCode 785. 判断二分图(染色法)

文章目录1. 题目2. 解题1. 题目 给定一个无向图graph&#xff0c;当这个图为二分图时返回true。 如果我们能将一个图的节点集合分割成两个独立的子集A和B&#xff0c;并使图中的每一条边的两个节点一个来自A集合&#xff0c;一个来自B集合&#xff0c;我们就将这个图称为二分…

css检测,CSS检测工具 CSS Lint简介

Nicholas C. Zakas最近发布了CSS Lint&#xff0c;旨在检测CSS代码中存在的各种问题&#xff0c;从而写出更高效的CSS。CSS Lint现有的一些规则&#xff1a;修复解析错误(Parsing errors should be fixed)避免使用多类选择符(Dont use adjoining classes)IE6以及更古老的浏览器…

LeetCode 1506. Find Root of N-Ary Tree(异或)

文章目录1. 题目2. 解题1. 题目 Given all the nodes of an N-ary tree as an array Node[] tree where each node has a unique value. Find and return the root of the N-ary tree. Follow up: Could you solve this problem in constant space complexity with a linea…

客户端与服务器之间的文件传输,客户端与服务器的文件传输

客户端与服务器的文件传输 内容精选换一换使用FTP上传文件时&#xff0c;写入失败&#xff0c;文件传输失败。该文档适用于Windows系统上的FTP服务。FTP服务端在NAT环境下&#xff0c;客户端需使用被动模式连接服务端。在这种情况下&#xff0c;服务端的IP地址无法从路由器外部…

LeetCode 280. 摆动排序

文章目录1. 题目2. 解题1. 题目 给你一个无序的数组 nums, 将该数字 原地 重排后使得 nums[0] < nums[1] > nums[2] < nums[3]...。 示例: 输入: nums [3,5,2,1,6,4] 输出: 一个可能的解答是 [3,5,1,6,2,4]来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链…

LeetCode 683. K 个空花盆(set/滑动窗口)

文章目录1. 题目2. 解题2.1 set 有序2.2 滑动窗口1. 题目 花园里有 N 个花盆&#xff0c;每个花盆里都有一朵花。 这 N 朵花会在 N 天内依次开放&#xff0c;每天有且仅有一朵花会开放并且会一直盛开下去。 给定一个数组 flowers 包含从 1 到 N 的数字&#xff0c;每个数字表…

(转)一步一步Asp.Net MVC系列_权限管理设计起始篇

原文地址&#xff1a;http://www.cnblogs.com/mysweet/archive/2012/07/26/2610793.html前一段时间,写了一步一步asp.net的一系列博客,最近,也快要大四,忙着准备找个工作,这也算是最后一个假期了,这个系列可能不太长,尽量写完.还是多学习,少扯淡的风格,我们的学习还好继续,现在…

无盘服务器 机械盘,Win7启动速度研究,同样的PC配置,机械盘、固态盘、无盘网络启动速度为何不同?...

别装深沉了&#xff0c;赶快来凑凑热闹吧&#xff01;您需要 登录 才可以下载或查看&#xff0c;没有帐号&#xff1f;立即注册x一、环境&#xff1a;一台台式机(映泰B85、i5-4590、16G内存、三星、Intel固态盘、Realtek网卡)&#xff1b;一台笔记本(T440P、8G内存、三星、Inte…