Sort a string Lexicographically Using Triple Cyclic Shifts in Java2025年5月7日 | 阅读 5 分钟 给定一个字符串,我们的任务是用最多 N/2 次移动来对前 N 个不同字母组成的字符串进行字典序排序。每次移动包括以下操作:
如果字符串可以排序,则打印所需的移动次数。如果不行,则打印“不可能”。 示例 1 字符串 str = "dcab" 输出 是的,这是可能的,并且移动次数为 1 解释 通过选择索引 0、1 和 3 并将它们全部进行一次循环移位,将给定的字符串 "dcab" 变成了 "abcd"。 示例 2 输入 字符串 str = "bcda" 输出 是的,这是可能的,并且移动次数为 2 解释 首先,通过使用索引 0、1 和 3 进行循环移位,将 "bcda" 转换为 "cbda"。 之后,选择索引 0、2 和 3,通过另一次循环移位将 "cbda" 转换为 "abcd"。 示例 3 输入 字符串 str = "abcd" 输出 否,这是不可能的,移动次数为 0。 解释 "abcd" 已经是字符串的排序方式。无需进行移位。 方法:使用三重循环移位在提供的 Java 代码中,通过使用循环移位(包括在列表中交换三个索引)来开发一种字符串排序算法。通过将 'a' 映射到 0,'b' 映射到 1,依此类推,可以表示与输入字符串中的字符位置对应的整数列表。一个列表(索引)用于跟踪交换,代码会检测不在正确位置的元素,并尝试通过循环移位来修复它们。该方法通过执行交换来重新定位元素,并确定是否可以为每个已移位的元素创建有效的三个一组。为了表明在限制下无法排序,或者是否已超过允许的最大移动次数,它还使用了一个标志。 算法步骤 1:在一个向量中设置整数,该向量表示字符串的正确字符。 步骤 2:适当地排列这些组件,以便它们都可以在单个循环中占据正确的索引。 步骤 3:遍历一个向量组件 步骤 4:如果元素不在其排序后的索引位置,请验证是否可以在单个循环中将两个或多个整数放置在其正确索引处。 步骤 4.1:如果条件满足,则执行循环;如果未满足,则查看是否存在一个唯一索引,该索引不包含正确的元素。 步骤 4.2:如果条件满足,则选择此索引作为循环的第三个索引并执行循环。 步骤 4.3:如果上述任何条件均未满足,则将无法排序。从循环中退出,然后打印“不可能”。 步骤 5:在完成循环移位后,存储参与移位的索引。 步骤 6:如果元素在其排序后的位置,则继续处理下一个索引。 步骤 7:对于每个向量元素,重复前面的两个步骤。 步骤 8:如果遍历完成并且整个 数组 已排序,则打印所需的移位次数。如果未排序,则打印“不可能”。 实施文件名:LexicographicSorting.java 输出 Yes, it is Possible, and the moves are 1 复杂度分析 上述代码的时间复杂度为 O(N),其中 "N" 代表字符串中字母的数量,空间复杂度为 O(N)。 下一个主题Java 中的 Cullen 数 |
最显著的组合优化问题之一是背包问题 Java。背包问题有两种类别。0-1 背包问题 阶乘背包问题 让我们分别讨论它们。0-1 背包问题 给定 n 个不同物品的价值和重量。需要将这些物品放入一个...
阅读 6 分钟
在本节中,我们将学习什么是 Tribonacci 数,并创建计算 Tribonacci 数的 Java 程序。Tribonacci 数程序经常出现在 Java 编码面试和学术中。Tribonacci 数 Tribonacci 数与 Fibonacci 数相同。我们可以得到...
阅读 3 分钟
在 Java 中,提供的字符通过 Reader 类的 read(char[]) 函数读取到数组中。尝试读取数组长度数量的字符后,将返回成功读取的字符数。在处理...时,通常会采用此技术。
阅读 4 分钟
在 Java 中,有多种方法可以检索日期范围。最常见的选择是使用 Java 标准库中的内置类,例如 LocalDate 类,或者第三方库,例如 Joda-Time 或 Java 8 中引入的较新的 Java Time API...
阅读 4 分钟
? 在 Java 中,BufferedReader 是一个类,它提供了从字符输入流高效读取字符的功能。BufferedReader 可能抛出 IOException 的主要原因之一是为了处理在读取输入流过程中可能发生的错误。IOException 是一个检查型...
阅读 4 分钟
在本节中,我们将创建 Java 程序,使用方法和命令行参数查找两个数字的和或加法,三个数字的和,以及 n 个数字的和。Java 中的两个数字相加 在 Java 中,查找两个数字的和...
阅读 6 分钟
尾部递归是递归的一个特例,其中递归调用是函数中的最后一个操作。它允许某些编译器或解释器优化递归调用,以避免消耗额外的堆栈空间,这对于深度递归调用可能会导致堆栈溢出错误。例如……
5 分钟阅读
问题陈述 目标是使用两个数组 array1 和 array2 来确定 array1 是否是 array2 的子集。如果数组 array1 中的每个元素都在 array2 中,则 array1 是 array2 的子集。方法 1:使用蛮力方法 找出是否...
阅读 6 分钟
为了确定字符串中相等对的数量,需要找到文本中相同字符出现在不同位置的所有实例。当两个字符相同但出现在不同索引时,一对被认为是 "相等" 的。目标是确定有多少...
5 分钟阅读
程序员通常会编写许多 Java 模式程序进行编码练习和面试。模式程序通常在面试中被问到,以检查逻辑思维及其在程序中的实现。在本节中,我们将创建 Java 程序来打印空...
阅读 4 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India