Java 中自定义字符串排序2024年9月10日 | 阅读 6 分钟 给定两个字符串 a1 和 a2。字符串 a1 的所有字符都是唯一的,并且按特定顺序排序。我们的任务是排列字符串 a2 的字符,使得字符串 a1 中字符出现的顺序在 a2 中也出现。字符串 a2 可以有许多有效的排列。返回字符串 a2 的任何一个有效排列。 示例 1 输入 字符串 a1 = "ktrmps" 字符串 a2 = "stkmoorp" 输出: "ktrmpsoo" 解释: 在字符串 a1 中,我们看到字符 'k' 首先出现。之后是字符 't',然后是 'r',然后是 'm',然后是 'p',最后是 's'。然而,字符串 a2 中并没有出现相同的顺序。因此,我们排列字符串 a2,得到 "ktrmpsoo"。在这个字符串中,顺序与字符串 a1 相同。因此,"ktrmpsoo" 是我们的答案。 示例 2 输入 字符串 a1 = "erhdqo" 字符串 a2 = "wwdybr" 输出: "rdwwyb" 解释: 在字符串 a1 中,我们看到字符 'e' 首先出现。之后是字符 'r',然后是 'h',然后是 'd',然后是 'q',最后是 'o'。然而,字符串 a2 中并没有出现相同的顺序。因此,我们排列字符串 a2,得到 "rdwwyb"。在这个字符串中,顺序与字符串 a1 相同。因此,"rdwwyb" 是我们的答案。请注意,"rdybww" 或 "rdbwwy" 也是有效的排列。 示例 3 输入 字符串 a1 = "abcd" 字符串 a2 = "efgh" 输出: "efgh" 解释: 字符串 a2 中没有字符与字符串 a1 中的字符匹配。因此,不需要排列。这样,我们可以将字符串 a2 作为我们的答案。 朴素方法朴素方法是使用两个嵌套循环。外层循环遍历字符串 a1,内层循环遍历字符串 a2。内层循环检查外层循环变量指向的字符是否存在于字符串 a2 中。如果存在,则将其追加到名为 _answer_ 的字符串中。请注意,该字符串的所有出现都会被追加并从字符串中移除。最后,我们返回 _answer_。 文件名: CustomSortString.java 输出 For the strings "trmps" and "stkmoorp", the permuted string is: "trmpskoo" For the strings "erhdqo" and "wwdybr", the permuted string is: "rdwwyb" For the strings "abcd" and "efgh", the permuted string is: "efgh" 复杂度分析: 在最坏情况下,字符串 a2 中不会删除任何字符。因此,在每次外层循环迭代中,字符串 a2 的大小保持不变。正是由于这个原因,程序的时间复杂度为 O(M x N),其中 M 是字符串 a1 中的总字符数,N 是字符串 a2 中的总字符数。该程序不使用任何额外空间,因此空间复杂度为 O(1)。 现在,我们将进行一些优化以降低程序的时间复杂度。 方法: 使用字符计数为了获得线性时间复杂度,我们将计算字符在字符串 a2 中出现的次数,并将其存储在一个数组中(在本例中为 tempArr[])。然后,遍历字符串 a1,并根据字符串 a1 中字符的排列顺序,使用 tempArr[] 构造结果字符串。遍历 tempArr[] 以将字符串 a2 的剩余字符追加到结果字符串中。请参阅以下程序。 文件名: CustomSortString1.java 输出 For the strings "trmps" and "stkmoorp", the permuted string is: "trmpskoo" For the strings "erhdqo" and "wwdybr", the permuted string is: "rdbwwy" For the strings "abcd" and "efgh", the permuted string is: "efgh" 复杂度分析: 该程序使用了嵌套的 for 循环。但是,这不会使程序的时间复杂度达到 O(M x N)。这是因为如果字符串 a1 中的字符不存在于字符串 a2 中,则内层循环将不起作用。该循环最多会遍历 O(N) 次。因此,程序的时间复杂度为 O(M + N),其中 M 是字符串 a1 的大小,N 是字符串 a2 的大小。T 该程序使用了数组 bucketArr[]。但是,bucketArr[] 的大小是固定的。因此,使程序空间复杂度恒定,即 O(1)。 下一个主题Java中计算字符串中不同子串的数量 |
死代码是开发人员在编程过程中经常遇到的一个常见问题。它指的是编写但从未在程序运行时执行的代码行或代码块。虽然这似乎无害,但死代码会使代码库混乱,使其更难...
阅读 3 分钟
我们的主要关注点是元音集,因为元音集对于许多字符串操作问题通常很重要,其中一个问题是识别包含 K 个不同元音的给定字符串的最长子字符串。这个问题...
阅读 6 分钟
这是面试官经常搜索的一个非常常见的程序。我们可以根据一些特定的字符串分隔符来分割字符串。我们通常用逗号或空格分割字符串。我们使用字符串的split()方法来分割。split()...的语法
5 分钟阅读
在 Java 中,Snippet 是 jdk.jshell 模块和包中的一个类。它是在 Java 9 中引入的。它用于表示传递给 JShell.eval() 的 Java 源代码片段。它由 JShell 实例创建,因此...
阅读1分钟
?在 Java 中,ArrayList 是一个广泛使用的数据结构,允许动态调整元素大小。当涉及到显示 ArrayList 的内容时,默认行为是用方括号括起来打印元素。但是,在某些情况下,您可能想要...
5 分钟阅读
Two Sum - Pairs with Zero Sum 是另一个算法问题,也称为识别数组中和为零的整数对的问题。这个问题在编码面试和竞争性编程中非常普遍,因为它不仅需要...
5 分钟阅读
公约数序列是数论中一个有趣的主题,它涉及迭代地对一个数的真因子(不包括数本身)求和。序列一直持续,直到它以零终止、进入一个循环或(在罕见的理论情况下)变得无界。研究...
5 分钟阅读
如果一个数能被1和它本身整除,那么它就是素数。换句话说,素数是只有两个不同自然数因子1和它本身的自然数。例如,2、3、5、7、11等都是素数。请注意……
5 分钟阅读
用编程语言编写的 Top 15 框架。在 Java 中,我们使用框架来使用 Java 编程语言创建应用程序。用 Java 编写的可重用代码,作为模板,被称为 Java 框架。我们通过集成...开发应用程序。
7 分钟阅读
Java 是一种流行的编程语言,被世界各地的开发人员用于构建各种应用程序。尽管 Java 流行且可靠,但 Java 程序容易出错和出现异常。Java 中最常见的异常之一是 ClassNotFoundException。在本文中,...
阅读 4 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India