Java 中的字符串回文排列2024 年 9 月 10 日 | 阅读 8 分钟 我们得到了一个字符串 inStr。我们的任务是找出并打印出使用 inStr 字符串可以生成的所有回文。请注意,inStr 字符串的所有字符都必须用于生成回文。如果不存在回文,则显示适当的消息。 给定一个字符串,我们需要打印出可以使用该字符串中的字母生成的所有可能的 palindrome。示例: 示例 1 输入 字符串 inStr = "ttpkkp" 输出 "ptkktp", "pkttkp", "tpkkpt", "tkppkt", "kpttpk", "ktpptk" 是输入字符串的回文排列。 解释 这些是唯一包含了输入字符串 inStr 的所有字符并且也是回文的字符串。 示例 2 输入 字符串 inStr = "kkbbckdkd" 输出 "kkbdcdbkk" "kkdbcbdkk" "kbkdcdkbk" "kbdkckdbk" "kdkbcbkdk" "kdbkckbdk" "bkkdcdkkb" "bkdkckdkb" "bdkkckkdb" "dkkbcbkkd" "dkbkckbkd" "dbkkckkbd" 解释 这些是唯一包含了输入字符串 inStr 的所有字符并且也是回文的字符串。 示例 3 输入 字符串 inStr = "kkb" 输出 "kbk" 解释 唯一的字符串 "kbk" 包含了输入字符串 inStr 的所有字符并且也是一个回文。 简单方法简单的方法是找出字符串 inStr 的所有子集。之后,筛选出大小等于 inStr 的子集。在筛选出的子集中,检查哪些子集是回文并打印它们。 文件名: PalindromePermutation.java 输出 For the string: ttpkkp The permutated palindrome strings are: kpttpk tpkkpt ktpptk ptkktp pkttkp tkppkt For the string: kkbbckdkd The permutated palindrome strings are: kbdkckdbk bdkkckkdb kkbdcdbkk kdkbcbkdk dkkbcbkkd kdbkckbdk bkkdcdkkb kbkdcdkbk dbkkckkbd kkdbcbdkk dkbkckbkd bkdkckdkb For the string: kkb The permutated palindrome string is: kbk 复杂度分析:程序执行字符串的排列。程序还使用了循环。然而,字符串的排列是主要的耗时过程,这使得程序的时间复杂度为 O(n!)。此外,程序使用哈希集来存储输入字符串的排列。因此,程序空间复杂度也为 O(n! x n),其中 n 是输入字符串中存在的总字符数。 在查看了上述程序的复杂度分析后,很明显需要进行一些优化。这是因为上述程序的复杂度很高。在编写程序之前,让我们看一下以下步骤。 步骤 1:首先,需要检查是否可以使用输入字符串的字符生成回文。如果无法生成回文,则返回。 步骤 2:在完成第一步的检查后,我们可以通过考虑输入字符串中每个字符的一半频率来创建第一个回文字符串的“前半部分”(字典序最小)。 步骤 3:现在,遍历前半部分字符串的所有可能排列,并在每次迭代时在末尾添加该部分的反转。 步骤 4:如果字符串长度是奇数,则将具有奇数频率的字符添加到中间,以构成回文。 现在,请看下面的程序。 文件名: PalindromePermutation1.java 输出 For the string: ttpkkp The permutated palindrome strings are: ktpptk ptkktp pkttkp tkppkt kpttpk tpkkpt For the string: kkbbckdkd The permutated palindrome strings are: dbkkckkbd kdbkckbdk kkbdcdbkk dkkbcbkkd kdkbcbkdk kbkdcdkbk bdkkckkdb bkkdcdkkb kbdkckdbk kkdbcbdkk bkdkckdkb dkbkckbkd For the string: kkb The permutated palindrome string is: kbk 复杂度分析:程序执行的是“前半部分”字符串的排列。这使得程序的时间复杂度为 O((n / 2)!)。此外,程序使用哈希集来存储输入字符串的排列。因此,程序空间复杂度也为 O((n / 2)! x n / 2),其中 n 是输入字符串中存在的总字符数。 |
矩阵遍历是计算问题解决中常见的难题,与路径查找、模拟和游戏有关。网络上讨论的一个此类问题是“腐烂的橙子问题”,它模拟了橙子网格上腐烂的传播。这是一个理论上的...
7 分钟阅读
在 Java 中,可以使用 SortedSet 的 add() 函数将特定元素添加到 Set 集合中。此方法可确保添加的项保留集合的固有顺序,因为 SortedSet 实现(如 TreeSet)会自动对元素进行排序。将一个元素作为...
阅读 2 分钟
每个局部变量和最终空白字段在访问任何值时都会具有赋给它的值。值访问将包括变量的名称或表达式中出现的区域,除了赋值运算符 "=" 的左侧操作数。要...
阅读 15 分钟
在面向对象编程中,类是基本的构建块。它可以定义为描述类实例化相关的数据和行为的模板。实例化一个类就是创建该类的对象(变量),该对象可用于访问...
5 分钟阅读
问题如下:给定一个整数序列,您需要找出序列中缺失的最小正整数。序列中也可能包含重复的元素,以及负数,甚至……
5 分钟阅读
多态是面向对象编程 (OOP) 中的一个基本概念。多态这个词指的是多种形式的存在。这种能力增强了代码的灵活性、模块化和可维护性。Java 中有两种类型的多态:编译时多态(静态多态)和运行时多态(动态多态)。编译时多态(静态绑定)编译时...
5 分钟阅读
在 Java 中,当需要管理动态数据集合时,ArrayList 是一个受欢迎的选择。有时,我们可能需要将元素从一个 ArrayList 复制到另一个。该操作可以轻松执行,但为了确保,了解整个过程至关重要...
5 分钟阅读
在 Java 中,流是一个对象集合,可以对数组或集合等数据源执行不同的操作,并支持各种方法。它最初包含在 Java 8 的 java.util.stream 包中。许多聚合操作,如 filter...
阅读 4 分钟
在本节中,我们将了解如何创建一个 Java 程序来打印蝴蝶图案。这经常被面试官问到,以检查候选人的逻辑思维能力。为了实现蝴蝶图案的逻辑,我们输入 N...
阅读 4 分钟
在当今数据驱动的环境中,解读和理解人类语言的能力至关重要。一门名为“自然语言处理”(NLP)的研究领域,结合了语言学和计算机科学,旨在开发能够识别、解析和生成人类语言的计算机程序。对于NLP工作,Java,一种灵活且流行的...
阅读 4 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India