Java 中形成回文的最小插入数2024年9月10日 | 阅读 9 分钟 给定一个字符串。我们的任务是通过插入字符来将该字符串转换为回文串。字符只能插入到输入字符串的最左侧。在输出中,我们需要提及为了使输入字符串成为回文串而插入的字符总数。请参阅以下示例。 示例:1 输入 字符串 str = "ab" 输出 1 解释: 如果我们在字符串的最左侧插入字符 'b',我们得到字符串 "bab",这是一个回文串。因此,插入到输入字符串中的字符总数为 1。 示例:2 输入 字符串 str = "abcd" 输出 3 解释: 如果我们在字符串的最左侧插入字符 'b',我们得到字符串 "dcbabcd",这是一个回文串。因此,插入到输入字符串中的字符总数为 3。 例如:3 输入 字符串 str = "bab" 输出 0 解释: 输入字符串已经是回文串。因此,不需要插入任何字符。输出为 0。 朴素方法在这种方法中,我们将使用递归。我们将使用一个名为 computeMinInsertions() 的方法来计算使字符串成为回文串所需的最小字符数。请观察以下实现。 文件名: MinInsertionPalindrome.java 输出 For the string: ab The minimum number of characters that should be inserted to make it palindromic is: 1 For the string: abcd The minimum number of characters that should be inserted to make it palindromic is: 3 For the string: bab The minimum number of characters that should be inserted to make it palindromic is: 0 复杂度分析: 程序的时间复杂度为 O(nn),空间复杂度为 O(n),其中 n 是输入字符串中存在的字符总数。 上述程序的时间复杂度非常高,不适用于大型输入。高时间复杂度的原因是许多子问题被反复计算。我们可以通过动态规划来避免子问题的重复计算。以下方法展示了这一点。 方法:使用动态规划我们将使用一个二维数组来存储子问题的解,以便它们不会被重复计算。此外,我们将使用存储的子问题解来计算最终解。 文件名: MinInsertionPalindrome1.java 输出 For the string: ab The minimum number of characters that should be inserted to make it palindromic is: 1 For the string: abcd The minimum number of characters that should be inserted to make it palindromic is: 3 For the string: bab The minimum number of characters that should be inserted to make it palindromic is: 0 复杂度分析: 由于使用了两个循环(嵌套循环),程序的总时间复杂度为 O(n2)。此外,在 computeMinInsertions() 方法中使用了二维数组,使得程序的空间复杂度为 O(n2),其中 n 是输入字符串中存在的字符总数。 另一种方法:使用最长公共子序列另一种方法是使用 LCS(最长公共子序列)问题的概念。使用此方法,我们将找到输入字符串及其反序字符串的最长公共子序列。 文件名: MinInsertionPalindrome2.java 输出 For the string: ab The minimum number of characters that should be inserted to make it palindromic is: 1 For the string: abcd The minimum number of characters that should be inserted to make it palindromic is: 3 For the string: bab The minimum number of characters that should be inserted to make it palindromic is: 0 复杂度分析:该程序的时间复杂度和空间复杂度与前一个程序相同。 我们仍然可以对空间复杂度进行优化。请注意,在 LCS 表中,我们只需要当前行和上一行的元素。其说明在以下程序中给出。 文件名: MinInsertionPalindrome3.java 输出 For the string: ab The minimum number of characters that should be inserted to make it palindromic is: 1 For the string: abcd The minimum number of characters that should be inserted to make it palindromic is: 3 For the string: bab The minimum number of characters that should be inserted to make it palindromic is: 0 复杂度分析: 该程序的时间复杂度与前一个程序相同。然而,该程序使用的空间复杂度比前一个程序要好,即 O(N),其中 N 是输入字符串中存在的字符总数。这是因为该程序仅使用了单维数组。 下一个主题Java 中的摆动排序 |
计算机科学中的一个著名挑战是单词阶梯问题,它涉及通过一次改变一个字母来将一个单词变成另一个单词。例如,通过将单词“cat”更改为“cot”,“cot”更改为“dot”,最后将“dot”更改为“dog”,我们可以得到单词... ...
5 分钟阅读
Java 中的“更大的元素”:在数组中,“更大的元素”是指紧邻当前元素且大于当前元素的元素。此外,“更大的元素”应该出现在当前元素的后面。任务是返回“更大的...
阅读 10 分钟
在数字娱乐领域,游戏一直占据着特殊的位置,以其身临其境的体验和引人入胜的游戏玩法吸引着观众。在无数游戏的开发中扮演重要角色的技术之一是 Java。Java 以其多功能性、可移植性和丰富的库而闻名...
阅读 4 分钟
在本教程中,我们将讨论 Java 中的稀疏数字。稀疏数字是指其二进制表示中不包含任何两个或两个以上连续设置位的数字。让我们通过几个例子来理解它。示例 1:输入 int n =...
阅读 4 分钟
欺凌算法 (bully algorithm) 是一种选举算法,主要用于选择一个协调者。在分布式系统中,我们需要一些选举算法,如欺凌算法和环算法,来获得一个执行其他进程所需功能的协调者。选举算法选择一个单一的...
阅读 4 分钟
Java 中的数据处理和格式化可以通过 SimpleDateFormat 和 Gregorian Calendar 等类来完成。日期和时间字段操作方法在 Gregorian Calendar 类中可用,该类是 Java.util 包的组成部分。但是,由于它需要生成日历实例和修改...
阅读 2 分钟
detectedCharset() 方法是 java.nio.charset.CharsetDecoder 类的一个内置方法,它检索此解码器已检测到的字符集。该方法的默认实现始终抛出 UnsupportedOperationException。自动检测解码器应重写此方法,一旦输入字符集已...
阅读 3 分钟
传统上,我们使用算术运算(/)进行除法。除法运算在某些场合需要替代实现,因为系统限制、特定编码要求或对底层除法逻辑的好奇。除法的核心在于确定……
阅读 6 分钟
在 Java 中比较字符串时,了解 == 运算符和 .equals() 方法之间的区别非常重要。在 Java 中,字符串是一个对象,比较对象需要考虑您是想比较它们的引用(内存地址)还是它们的实际内容。== 运算符...
5 分钟阅读
本文旨在解释如何在 Java 中创建抽象类的实例。我们将研究创建抽象类实例的不同方法以及每种方法的优缺点。我们还将讨论重要性...
阅读 6 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India