[剑指 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 ...
随机推荐
- 深入浅出Java多线程(九):synchronized与锁
引言 大家好,我是你们的老伙计秀才!今天带来的是[深入浅出Java多线程]系列的第九篇内容:synchronized与锁.大家觉得有用请点赞,喜欢请关注!秀才在此谢过大家了!!! 在现代软件开发中,多 ...
- Linux 列出文件的绝对路径
1.使用ls中列出文件的绝对路径ls | sed "s:^:`pwd`/:" 2.列出当前目录下的所有文件(包括隐藏文件)的绝对路径, 对目录不做递归find $PWD -maxd ...
- [数据库] 数据库中的DDL、DML、DQL、DCL
SQL 程序语言有四种类型,对数据库的基本操作都属于这四种类,也就是标题上显示的 DDL.DML.DQL.DCL. 1. DDL DDL(Data Definition Language 数据定义语言 ...
- NC50454 A Simple Problem with Integers
题目链接 题目 题目描述 给定数列 \(a[1],a[2], \dots,a[n]\) ,你需要依次进行q个操作,操作有两类: 1 l r x:给定l,r,x,对于所有 \(i \in[l,r]\) ...
- 前端学习 node 快速入门 系列 —— 项目版权格式化
其他章节请看: 前端学习 node 快速入门 系列 项目版权格式化 需求 替换整个项目的版权信息,替换文件为 .c 和 .h 结尾. 分析 版权信息通常都在文件开头,通过是否有 copyright 来 ...
- STM32F401的PWM输出
PWM的说明 PWM有三个关键指标: PWM频率, 占空比, 区分度 对于同一个时钟频率下工作的单片机, 区分度是和PWM工作频率相关的, 因为总频率是固定的, PWM工作频率越高, 留下给区分度的部 ...
- spring boot+sqlite+mybatis实现增删改查例子
主要是更换了下sqlite的数据源而已,其他代码不变. 我都贴一下吧,这个算是比较通用的基础增删改查代码. 1.创建test.db 可以使用Idea自带的Database插件配置,也可以命令行创建,具 ...
- Java Socket编程系列(四)开发支持多客户端访问的Server
例子来自Java官方教程,稍作调整. 上一篇介绍了单客户端访问的Server实现,这一篇实现的是多个客户端请求服务端,根据服务端提示进行一系列操作. 协议类(和系列三一样没变): package co ...
- 解密prompt系列24. RLHF新方案之训练策略:SLiC-HF & DPO & RRHF & RSO
去年我们梳理过OpenAI,Anthropic和DeepMind出品的经典RLHF论文.今年我们会针对经典RLHF算法存在的不稳定,成本高,效率低等问题讨论一些新的方案.不熟悉RLHF的同学建议先看这 ...
- golang中的接口(数据类型)
golang中的接口 Golang 中的接口是一种抽象数据类型,Golang 中接口定义了对象的行为规范,只定义规范 不实现.接口中定义的规范由具体的对象来实现,通俗的讲接口就一个标准,它是对一个对象 ...