[剑指 Offer II 114. 外星文字典] 拓扑排序
import java.util.*; class Solution {
public static void main(String[] args) {
Solution solution = new Solution();
System.out.println(solution.alienOrder(new String[]{
"ac","ab","zc","zb"
}));
}
public String alienOrder(String[] words) {
int len = words.length;
Set<Integer> flag = new HashSet<>();
for (int i = 0; i < len; i++) {
for(int j =0;j<words[i].length();j++){
flag.add(words[i].charAt(j)-'a');
}
}
Set<Integer>[] g = new HashSet[26];
Arrays.setAll(g,e->new HashSet<>());
int[] ingress = new int[26];
Set<List<Integer>> edge = new HashSet<>();
for(int i = 0;i<len-1;i++){
String a = words[i];
String b = words[i+1]; int alen = a.length();
int blen = b.length();
int min = Math.min(alen,blen); boolean find = false;
int j = 0;
for(j=0;j<min;j++){
if( a.charAt(j) != b.charAt(j)){
find = true;
break;
}
} if(!find ) {
if(alen > blen){
return "";
}
}else{
int d1 = a.charAt(j) - 'a';
int d2 = b.charAt(j) - 'a'; g[d1].add(d2);
if(!edge.contains(Arrays.asList(d1,d2))) {
ingress[d2]++;
edge.add(Arrays.asList(d1,d2));
}
}
} StringBuilder ans = build(g,ingress,flag);
return ans.toString();
} public StringBuilder build(Set<Integer>[] g,int[] ingress,Set<Integer> flag) {
ArrayDeque<Integer> queue = new ArrayDeque<Integer>();
for (int i = 0; i < 26; i++) {
if (flag.contains(i) && ingress[i] == 0) {
queue.offer(i);
}
} StringBuilder sb = new StringBuilder();
while (!queue.isEmpty()) {
int u = queue.poll();
if (ingress[u] == 0) {
sb.append((char) ('a' + u));
}
for (Integer v : g[u]) {
ingress[v]--;
if (ingress[v] == 0) {
queue.offer(v);
}
}
} if( flag.size() != sb.length()) {
return new StringBuilder("");
}
return sb;
}
}
[剑指 Offer II 114. 外星文字典] 拓扑排序的更多相关文章
- 刷题-力扣-剑指 Offer II 055. 二叉搜索树迭代器
剑指 Offer II 055. 二叉搜索树迭代器 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/kTOapQ 著作权归领扣网络所有 ...
- 【剑指 Offer II 001. 整数除法】同leedcode 29.两数相除
剑指 Offer II 001. 整数除法 解题思路 在计算的时候将负数转化为正数,对于32位整数而言,最小的正数是-2^31, 将其转化为正数是2^31,导致溢出.因此将正数转化为负数不会导致溢出. ...
- 剑指Offer(三十七):数字在排序数组中出现的次数
剑指Offer(三十七):数字在排序数组中出现的次数 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.n ...
- 剑指 Offer II Trie前缀树
初始化 数组初始化在class外的话 要memset 在主函数里面memset 在class内不用 062. 实现前缀树 class Trie { public: /** Initialize you ...
- 剑指 Offer II 动态规划
088. 爬楼梯的最少成本 class Solution { public: int minCostClimbingStairs(vector<int>& cost) { int ...
- 剑指 Offer II 回溯法
086. 分割回文子字符串 用substr枚举 因为是连续的 不是放与不放的问题 class Solution { public: vector<vector<string>> ...
- 剑指Offer——II平衡二叉树
class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = None # 这道题使用中序遍历加上 ...
- 【力扣】剑指 Offer II 092. 翻转字符
题目 解题思路 一个很暴力的想法,在满足单调递增的前提下,使每一位分别取 1 或 0,去看看哪个结果小. 递归函数定义int dp(StringBuilder sb, int ind, int pre ...
- 剑指 Offer II 二分查找
068. 查找插入位置 class Solution { public: int searchInsert(vector<int>& nums, int target) { int ...
- 剑指 Offer II 堆
059. 数据流的第 K 大数值 class KthLargest { public: priority_queue<int,vector<int>,greater<int&g ...
随机推荐
- (python)每日代码||2024.2.2||python当中,True==1竟然引发了问题
做题的时候有的测试点里竟然用True替换1,骗过了我的代码,结果没过测试点 lst = [1, True] for item in lst: if not isinstance(item, bool) ...
- Linux shell 判断变量是否包含某个字符串的几种方法
方法一:利用grep查找 strA="long string" strB="string" result=$(echo $strA | grep "$ ...
- 【Unity3D】Transform组件
1 前言 每个游戏对象有且仅有一个 Transform 组件,Transform 组件保存了游戏对象的位置信息,用户可以通过操作 Transform 组件实现对游戏对象的平移.旋转.缩放等变换.每 ...
- Laravel入坑指南(8)——控制台程序
我们知道,php代码不仅可以用web的形式对外提供服务,同时也可以在命令行下执行. 对于原生的php来说,假设我们有一个php文件,名为Command.php,如果想要在控制台下执行这个文件,那么我们 ...
- spring boot2.0集成mybatis-plus实战
说明: 本例演示spring boot2.0如何集成mybatis-plus 如何使用代码生成器 项目源码: https://gitee.com/indexman/mybatis-plus-demo ...
- Modbus协议入门
1.Modbus协议是不是开源的,免费的? 标准.开放,用户可以免费.放心地使用Modbus协议,不需要交纳许可证费,也不会侵犯知识产权. 2.怎么传输,有线还是无线? 既可以有线传输如双绞线.光纤, ...
- 【LeetCode贪心#05】K 次取反后最大化的数组和(自定义sort、二重贪心)
K次取反后最大化的数组和 力扣题目链接(opens new window) 给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这 ...
- 矩池云教程|体验 OpenAI 最近推出的 3D 生成模型 Shap-E!
Shap-E 是由 OpenAI 最近推出的3D生成模型,使用者可以通过简单的文字或图像进行三维模型的生成,OpenAI 认为相比于点云的生成模型Point-E,Shap-E的收敛更快.本文将展示如何 ...
- 学会了MySql高级查询让你在工作中游刃有余
一.单元概述 通过本章的学习能够理解MySQL数据库中分组查询的含义,掌握常用分组函数的使用,掌握GROUP BY子句的使用规则,掌握分组后数据结果的条件过滤,掌握SELECT语句执行过程,理解子查询 ...
- 【Azure 事件中心】Flink消费Event Hub中事件, 使用Azure默认示例代码,始终获取新产生的事件,如何消费旧事件呢?
问题描述 根据Azure Event Hub示例文档,[将 Apache Flink 与适用于 Apache Kafka 的 Azure 事件中心配合使用],配置好 consumer.config 文 ...