从给定的排序字典中查找优先级字符17 Mar 2025 | 4 分钟阅读 问题陈述 你得到了一个按字典顺序排序的字符串数组。你的任务是确定此数组中使用的字符顺序。 例如 在上面的例子中,字符的顺序将是 b、d、a、c 因此,我们必须以字符串的形式打印字符的字典序。 方法为了解决这个问题,我们将一次比较两个单词,并且不匹配的字符将决定字符的顺序。 例如,我们将比较 "baa" 和 "abcd"。 两个字符串的索引 0 不同,所以我们可以说 b 会排在 a 之前,而其他字符的顺序我们无法确定。 我们将创建一个字符的有向图,然后打印拓扑排序顺序以获得我们的答案。 例如 在上面的例子中,我们将一次比较两个相邻的字符串并尝试创建一个图。 对于 i=0 和 i=1 我们有 "baa" 和 "abcd",不匹配的字符是 b、a。所以可以肯定的是 b 会在 a 之前,并且会有一条从 b 到 a 的边。 ![]() 对于 i=1 和 i=2 我们有 "abcd" 和 "abca",第一个不匹配的字符是 'd' 和 'a',所以会有一条从 d 到 a 的边。 现在图将看起来像这样 ![]() 对于 i=2 和 i=3,我们有字符串 "abca" 和 "cba",所以第一个不匹配的字符是 'a' 和 'c',所以它们将绘制一条从节点 a 到节点 c 的边。 图将是 ![]() 对于 i=3 和 i=4,我们有 "cab" 和 "cad",所以不匹配的字符是 'b' 和 'd'。现在会有一条从 'b' 到 'd' 的边,并且两者都有指向 'a' 的边。所以我们将像这样修改图 ![]() 现在,在完成整个迭代之后,我们将得到这个图的拓扑排序顺序,即 "bdac",这将是我们的答案。 Java 代码 输出 ![]() 说明 在上面的代码中,我们有一个函数,它以字符串形式返回答案,我们正在打印结果。我们使用一个字符与 HashSet 的哈希映射,其中对于每个唯一的字符,我们将它的邻居存储到 HashSet 中。 我们使用了另一个字符与整数的哈希映射来存储特定字符的入度(传入边的数量)。 最初,我们将所有字符的入度存储为 0。 现在我们正在迭代字符串数组从索引 0 到索引 n-2,并比较两个相邻的字符串。 对于字符串,我们将逐字符迭代,如果两个字符串在相同索引处的字符不匹配,则我们将停止。 现在我们检查图是否包含字符串 1 的字符。如果图不包含字符 1,那么我们将它添加到图中,并且我们将字符 2 作为其邻居放入字符 1 的 HashSet 中。 此外,我们将字符 2 的入度增加 1。 在创建图和字符的入度之后,我们将获得图的拓扑排序。 我们将使用 Kahn 算法以广度优先搜索顺序获取拓扑排序顺序。我们将使用队列并放入所有入度为零的字符。现在我们将迭代队列直到它不为空。 每次,我们都会从队列中移除顶部元素并将其添加到我们的答案中。我们将访问它的邻居并将其入度减 1。如果任何邻居的入度等于零,我们将其添加到队列中。 因此我们将获得拓扑排序顺序。 时间复杂度: O(N*L),其中 N 是数组的长度,L 是字符串的最大长度。 空间复杂度: O(N*L) 下一个主题检查字符串的任何变位词是否是回文 |
在本课中,我们将学习如何查找两个已排序数组的相对补集。已排序数组是指已按指定顺序(字母、时间、顺序、基数顺序)组织的数组。未排序数组是指没有任何特定顺序的数组。让我们……
阅读 2 分钟
? 优先队列对于计算机科学和许多其他应用至关重要,并且实现它们的两个流行数据结构是二叉堆和二叉搜索树(BST)。在这篇文章中,我们将探讨为什么二叉堆经常被选择用于优先队列实现而不是 BST……
阅读 6 分钟
一个特定字符串的所有后缀都排列在一个后缀数组中。这个概念与后缀树相似,后缀树是文本所有后缀的压缩树。一个基本的数据结构,被许多处理字符串的算法使用,是...
阅读9分钟
问题陈述给定一个 0 索引的整数数组 nums 和一个正整数 x。我们最初位于数组的 0 位置,并且可以根据以下规则访问其他位置:如果我们当前在位置 i,那么你可以移动到任何...
阅读 13 分钟
在本教程中,我们将学习如何确定数字 N,其中 (N + X) 可被 Y 整除,并且 (N - Y) 可被 X 整除。给定两个数字 X 和 Y。找到满足这两个条件的数字 N(N ≤ 10^18):(N + X)……
阅读 2 分钟
Fenwick 树,也称为二叉索引树 (BIT),是一种主要用于有效地对数组执行动态累积频率搜索的数据结构。它对于基于范围的计算非常有用,尤其是在数据集是静态的或更新不频繁的情况下……
5 分钟阅读
在下面的教程中,我们将学习 B 树数据结构,并考虑对其进行可视化。那么,让我们开始吧。什么是 B 树? B 树是一种特殊的多路搜索树,通常称为 M 路树,它会自行平衡。因为它们的……
阅读 12 分钟
问题陈述 将此问题视为选择数组中的特定索引,使得移除这些索引处的元素可以将数组转换为公平数组。找到此类索引的计数以实现偶数和奇数索引和的公平分布。例如,如果 nums =...
阅读 6 分钟
什么是而非线性数据结构? 数据结构 数据结构是一种以特定形式组织数据元素的特殊方式。数据以特定顺序排列对于在较少的时间内轻松访问特定数据元素而不占用...非常重要。
阅读 23 分钟
树是一种常见的非线性数据结构。与数组、栈、队列和链表等线性数据结构不同,树表示层次结构。树的排序信息无关紧要。它由两个指针和节点组成...
阅读 6 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India