当前位置: 首页 > news >正文

[NeetCode 150] Foreign Dictionary

Foreign Dictionary

There is a foreign language which uses the latin alphabet, but the order among letters is not “a”, “b”, “c” … “z” as in English.

You receive a list of non-empty strings words from the dictionary, where the words are sorted lexicographically based on the rules of this new language.

Derive the order of letters in this language. If the order is invalid, return an empty string. If there are multiple valid order of letters, return any of them.

A string a is lexicographically smaller than a string b if either of the following is true:

The first letter where they differ is smaller in a than in b.
There is no index i such that a[i] != b[i] and a.length < b.length.

Example 1:

Input: ["z","o"]Output: "zo"

Explanation:
From “z” and “o”, we know ‘z’ < ‘o’, so return “zo”.

Example 2:

Input: ["hrn","hrf","er","enn","rfnn"]Output: "hernf"

Explanation:

from “hrn” and “hrf”, we know ‘n’ < ‘f’
from “hrf” and “er”, we know ‘h’ < ‘e’
from “er” and “enn”, we know get ‘r’ < ‘n’
from “enn” and “rfnn” we know ‘e’<‘r’
so one possibile solution is “hernf”

Constraints:

The input words will contain characters only from lowercase ‘a’ to ‘z’.

1 <= words.length <= 100
1 <= words[i].length <= 100

Solution

From the order of the words, we can get the priority between 2 characters, which can be represented as a directed edge between them. When we organize all of the edges, we can get a DAG (Directed Acyclic Graph). Then we just need to do a topological sort with this DAG and get the answer.

Code

import queueclass Solution:def foreignDictionary(self, words: List[str]) -> str:edges = {c: set() for word in words for c in word}in_deg = {c: 0 for word in words for c in word}for i in range(len(words) - 1):w1, w2 = words[i], words[i + 1]minLen = min(len(w1), len(w2))if len(w1) > len(w2) and w1[:minLen] == w2[:minLen]:return ''for j in range(minLen):if w1[j] != w2[j]:edges[w1[j]].add(w2[j])breakfor value in edges.values():for c in value:in_deg[c] += 1print(edges)print(in_deg)que = queue.Queue()for key, value in in_deg.items():if value == 0:que.put(key)ans = []while not que.empty():cur = que.get()ans.append(cur)for nxt in edges.get(cur, []):in_deg[nxt] -= 1if in_deg[nxt] == 0:que.put(nxt)print(ans)if len(ans) != len(in_deg):return ''return ''.join(ans)

相关文章:

[NeetCode 150] Foreign Dictionary

Foreign Dictionary There is a foreign language which uses the latin alphabet, but the order among letters is not “a”, “b”, “c” … “z” as in English. You receive a list of non-empty strings words from the dictionary, where the words are sorted lex…...

小新学习K8s第一天之K8s基础概念

目录 一、Kubernetes&#xff08;K8s&#xff09;概述 1.1、什么是K8s 1.2、K8s的作用 1.3、K8s的功能 二、K8s的特性 2.1、弹性伸缩 2.2、自我修复 2.3、服务发现和负载均衡 2.4、自动发布&#xff08;默认滚动发布模式&#xff09;和回滚 2.5、集中化配置管理和密钥…...

如何用终端批量修改一个文件夹里面所有图片的后缀名?

步骤&#xff1a; winr &#xff0c;然后输入cmd,打开终端 使用cd命令导航到要修改图片后缀名的文件夹。eg.我的该文件夹(C:\dog)下&#xff0c;保存的图片。&#xff08;cd和文件目录之间要有空格&#xff09;批量改变后缀名&#xff0c;假如让后缀名全部要从 ".webp&q…...

关于AI网络架构的文章

思科OCP anounce了800G 51.2T G200-based minipack3 switch。对比之前Tesla anounce的TTPoE。真的很好奇&#xff0c;谁是AI-networking的未来&#xff0c;以及思科是否走在正确的路上&#xff0c;以及S1背后的技术。 大致浏览了相关的文章&#xff0c;先mark住&#xff0c;回…...

【ChatGPT】在多轮对话中引导 ChatGPT 保持一致性

在多轮对话中引导 ChatGPT 保持一致性 多轮对话是与 ChatGPT 等对话模型互动时的一大特点&#xff0c;特别是在复杂任务和长时间对话中&#xff0c;保持对话的一致性显得尤为重要。用户往往希望 ChatGPT 能够在上下文中理解先前的对话内容&#xff0c;避免反复重申问题或者给出…...

【Chapter 7】因果推断中的机器学习:从T-学习器到双重稳健估计

随着机器学习技术的发展&#xff0c;数据科学家们开始探索如何将这些先进的方法应用于因果推断问题&#xff0c;尤其是处理异质性效应&#xff08;Effect Heterogeneity&#xff09;时。本章将介绍几种基于机器学习的因果推断方法&#xff0c;包括T-学习器、X-学习器和双重稳健…...

vim的使用方法

常见的命令可参考&#xff1a; Linux vi/vim | 菜鸟教程​www.runoob.com/linux/linux-vim.html​编辑https://link.zhihu.com/?targethttps%3A//www.runoob.com/linux/linux-vim.html 1. vim的工作模式 vi/vim 共分为三种模式&#xff0c;命令模式、编辑输入模式和末行&am…...

OPPO携手比亚迪共同探索手机与汽车互融新时代

10月23日&#xff0c;OPPO与比亚迪宣布签订战略合作协议&#xff0c;双方将共同推进手机与汽车的互融合作&#xff0c;这一合作也标志着两大行业巨头在技术创新和产业融合上迈出了重要一步&#xff0c;为手机与汽车的深度融合探索新的可能。 OPPO创始人兼首席执行官陈明永、OP…...

Apache Linkis:重新定义计算中间件

在大数据技术蓬勃发展的今天&#xff0c;我们见证了从单一计算引擎到多元化计算范式的演进。然而&#xff0c;随着企业数据应用场景的日益丰富&#xff0c;一个严峻的挑战逐渐显现&#xff1a;如何有效管理和协调各类计算引擎&#xff0c;使其能够高效协同工作&#xff1f;Apac…...

go gorm简单使用方法

GORM 是 Go 语言中一个非常流行的 ORM&#xff08;对象关系映射&#xff09;库&#xff0c;它允许开发者通过结构体来定义数据库表结构&#xff0c;并提供了丰富的 API 来操作数据库。 安装 go get -u gorm.io/gorm go get -u gorm.io/driver/sqlite表结构 在 gorm 中定义表结…...

【c++高级篇】--多任务编程/多线程(Thread)

目录 1.进程和线程的概念&#xff1a; 1.1 进程&#xff08;Process&#xff09;&#xff1a; 1.2线程&#xff08;Thread&#xff09;&#xff1a; 1.3 对比总结&#xff1a; 2.多线程编程&#xff1a; 2.1 基于线程的多任务处理&#xff08;Thread&#xff09;&#xf…...

【力扣专题栏】两数相加,如何实现存储在链表中的整数相加?

题解目录 1、题目描述解释2、算法原理解析3、代码编写&#xff08;原始版本&#xff09;4、代码编写&#xff08;优化版本&#xff09; 1、题目描述解释 2、算法原理解析 3、代码编写&#xff08;原始版本&#xff09; /*** Definition for singly-linked list.* struct ListN…...

SOLID - 接口隔离原则(Interface Segregation Principle)

SOLID - 接口隔离原则&#xff08;Interface Segregation Principle) 定义 接口隔离原则&#xff08;Interface Segregation Principle&#xff0c;ISP&#xff09;是面向对象设计中的五个基本原则之一&#xff0c;通常缩写为SOLID中的I。这一原则由Robert C. Martin提出&…...

arrylist怎么让他变得不可修改

在Java中&#xff0c;要将一个 ArrayList变得不可修改&#xff0c;你可以使用以下几种方法&#xff1a; ###1. 使用 Collections.unmodifiableList Java 提供了 Collections.unmodifiableList 方法&#xff0c;可以生成一个不可修改的视图。这种方式返回的列表将不允许添加、…...

SpringMVC实战(3):拓展

四、RESTFul风格设计和实战 4.1 RESTFul风格概述 4.1.1 RESTFul风格简介 RESTful&#xff08;Representational State Transfer&#xff09;是一种软件架构风格&#xff0c;用于设计网络应用程序和服务之间的通信。它是一种基于标准 HTTP 方法的简单和轻量级的通信协议&…...

Vue应用中使用xlsx库实现Excel文件导出的完整指南

Vue应用中使用xlsx库实现Excel文件导出的完整指南 在现代Web开发中&#xff0c;经常需要将数据导出为Excel文件&#xff0c;以便于用户进行离线分析或记录。Vue.js作为一个轻量级且高效的前端框架&#xff0c;结合xlsx库可以轻松实现这一功能。本文将详细介绍如何在Vue应用中使…...

【数据分析】Power BI的使用教程

目录 1 Power BI架构1.1 Power BI Desktop1.2 Power BI服务1.3 Power BI移动版 2 Power Query2.1 Power Query编辑器2.2 Power Query的优点2.3 获取数据2.4 数据清洗的常用操作2.4.1 提升标题2.4.2 更改数据类型2.4.3 删除错误/空值2.4.4 删除重复项2.4.5 填充2.4.6 合并列2.4.…...

融合ASPICE与敏捷开发:探索汽车软件开发的最佳实践

ASPICE&#xff08;Automotive SPICE&#xff0c;即汽车软件过程改进和能力dEtermination&#xff09;与敏捷开发在软件开发领域各自具有独特的价值和特点&#xff0c;它们之间的关系可以归纳为既相互区别又相互补充。 一、ASPICE的特点 ASPICE是汽车行业对软件开发流程的一个评…...

后台管理系统的通用权限解决方案(三)SpringBoot整合Knife4j生成接口文档

1 Knife4j介绍 knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案&#xff0c;前身是swagger-bootstrap-ui&#xff0c;取名knife4j是希望它能像一把匕首一样小巧&#xff0c;轻量&#xff0c;并且功能强悍&#xff01; 其底层是对Springfox的封装&#xff0c;使…...

保研考研机试攻略:python笔记(1)

&#x1f428;&#x1f428;&#x1f428;宝子们好呀 ~ 我来更新欠大家的python笔记了&#xff0c;从这一篇开始我们来学下python&#xff0c;当然&#xff0c;如果只是想应对机试并且应试语言以C和C为主&#xff0c;那么大家对python了解一点就好&#xff0c;重点可以看高分篇…...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端&#xff0c;它允许HTTP与Elasticsearch 集群通信&#xff0c;而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于构建 API&#xff0c;支持 Python 3.6。它基于标准 Python 类型提示&#xff0c;易于学习且功能强大。以下是一个完整的 FastAPI 入门教程&#xff0c;涵盖从环境搭建到创建并运行一个简单的…...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个&#xff1f;3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制&#xff08;过半机制&#xff0…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)

目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关&#xff0…...

android13 app的触摸问题定位分析流程

一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...

Linux系统部署KES

1、安装准备 1.版本说明V008R006C009B0014 V008&#xff1a;是version产品的大版本。 R006&#xff1a;是release产品特性版本。 C009&#xff1a;是通用版 B0014&#xff1a;是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存&#xff1a;1GB 以上 硬盘&#xf…...

嵌入式常见 CPU 架构

架构类型架构厂商芯片厂商典型芯片特点与应用场景PICRISC (8/16 位)MicrochipMicrochipPIC16F877A、PIC18F4550简化指令集&#xff0c;单周期执行&#xff1b;低功耗、CIP 独立外设&#xff1b;用于家电、小电机控制、安防面板等嵌入式场景8051CISC (8 位)Intel&#xff08;原始…...