Java 中反转字符串并保留空格2024年9月10日 | 阅读 6 分钟 字符串反转是一个常见的编程问题,其中给定字符串需要被反转,使得字符串的最后一个字符成为第一个字符,反之亦然。但是,当保留空格时,反转字符串中空格的顺序应保持不变。 方法:反转字符串并保留空格。反转字符串并保留空格是一个字符串操作问题,其目标是在保留字符串中空格位置的同时反转给定的字符串。 找到解决方案的步骤如下: 第 1 步:获取输入字符串 "str" 的长度。 第 2 步:创建一个名为 "result" 的字符数组,其长度与 "str" 相同。 第 3 步:遍历字符串 "str",并将所有非空格字符复制到 "result" 数组的相应位置。 第 4 步:再次遍历字符串 "str",并将所有空格字符复制到 "result" 数组的相应位置。 第 5 步:通过从两端迭代 "result" 数组并交换每个字符与其对应位置的字符来反转 "result" 数组。 第 6 步:使用接受字符数组参数的 String 构造函数将 "result" 数组转换为字符串。 第 7 步:返回反转后的字符串。 实施以下是反转字符串并保留空格的一种方法。 文件名:ReverseStringPreservingSpaces1.java 输出 public class ReverseStringPreservingSpaces1 { public static void main(String[] args) { String str = "Hello World!"; String reversed = reverseStringPreservingSpaces(str); System.out.println(reversed); } public static String reverseStringPreservingSpaces(String str) { int len = str.length(); char[] result = new char[len]; // Iterate over the string and copy non-space characters into the result array for (int i = 0; i < len; i++) { if (str.charAt(i) != ' ') { result[i] = str.charAt(i); } } // Iterate over the string again, this time copying spaces into the result array for (int i = 0; i < len; i++) { if (str.charAt(i) == ' ') { result[i] = ' '; } } // Reverse the result array for (int i = 0, j = len - 1; i < j; i++, j--) { char temp = result[i]; result[i] = result[j]; result[j] = temp; } // Convert the result array to a string and return it return new String(result); } } 复杂度分析 时间复杂度:前两个 for 循环遍历输入字符串,每个循环需要 O(n) 时间,其中 n 是输入字符串的长度。因此,前两个循环的总时间复杂度为 O(n)。第三个 for 循环(反转结果数组)也需要 O(n) 时间,因为它遍历数组长度的一半。最后,将结果数组转换为字符串需要 O(n) 时间。因此,程序的总体时间复杂度为 O(n)。 空间复杂度:程序创建了一个新的字符数组,其长度等于输入字符串的长度,这需要 O(n) 的空间。此外,为第三个 for 循环创建了两个整数变量,这需要 O(1) 的空间。因此,程序的总体空间复杂度为 O(n)。 方法:带两个指针的字符数组带两个指针的字符数组是一种算法技术,用于通过使用从数组两端相互移动的两个指针来操作字符数组。该技术特别适用于解决涉及字符串操作的问题,并且可用于高效地反转字符串、检查字符串是否为回文以及删除字符串中的重复字符等。 找到解决方案的步骤如下: 第 1 步:使用 toCharArray() 方法将输入字符串转换为字符数组。 第 2 步:定义两个用于交换字符的指针,一个位于数组的开头 (left),另一个位于数组的末尾 (right)。 第 3 步:使用 while 循环遍历数组,直到 left 和 right 指针相遇。
第 4 步:使用接受字符数组作为输入的 String 构造函数将字符数组转换回字符串。 第 5 步:将反转后的字符串作为输出返回。 实施以下是 Java 中该方法的可能实现,其中包含解释每个步骤的注释: 文件名:StringReversePreservingSpaces2.java 输出 !dlroW olleH 复杂度分析 时间复杂度 reverseStringPreservingSpaces 方法中的 while 循环具有线性时间复杂度 O(n),其中 n 是输入字符串的长度。原因是循环遍历字符数组,直到两个指针在中间汇合,这需要最多 n/2 次迭代。在每次迭代中,算法会检查两个指针处的字符,并在必要时交换它们。由于每个字符最多被检查一次,最多交换一次,因此每次迭代的时间复杂度为 O(1)。因此,while 循环的总时间复杂度为 O(n * 1) = O(n)。 空间复杂度:由于输入字符串被转换为长度为 n 的字符数组,因此算法的空间复杂度为 O(n)。算法使用的指针和临时变量的辅助空间为 O(1),这是常数。 |
Java 提供了各种类和工具来管理不同的数据种类和过程。Number 类作为 Java 的数字包装类的超类,是基本类的一个示例。它包含用于转换、比较和对各种数字类型执行算术运算的方法...
阅读 6 分钟
Java 中 HashSet 和 HashMap 类的区别 HashMap 和 HashSet 是 Java 中最受欢迎的集合类。两者都用于数据结构。下表描述了 HashMap 和 HashSet 之间的区别:基础 HashMap HashSet 定义 Java HashMap 是 Map 接口的基于哈希表的实现。HashSet...
阅读 2 分钟
在计算机编程中,数字通常以二进制形式表示,其中每个位(数字)可以是 0 或 1。数字的第 k 位对应于位置为 k 的位,最右边的位(最低有效位)计为位置 0。要确定...
5 分钟阅读
两个排序数组的并集和交集是计算机科学和数据分析中的基本操作。在 Java 中,可以通过利用其固有的顺序来有效地对两个排序数组执行这些操作。两个数组的并集是所有元素的集合,这些元素...
14 分钟阅读
在编程方面,精确度至关重要。尤其是在涉及计算和运算的应用程序中,结果的准确性至关重要。这就是浮点数的作用所在。在 Java 编程世界中,理解和有效利用 float 数据类型对于...
阅读 4 分钟
当今的应用需要出色的并发管理以及可扩展性和快速响应能力。根据当今应用程序的要求,响应式编程已成为一种处理异步数据流的解决方案。这种方法允许应用程序与实时事件一起工作……
阅读 6 分钟
进度条是一个水平或垂直的条,用于可视化操作的进度。用于渲染进度条的类是 'JProgressBar',它是 Java Swing 包的一部分。它通过填充来显示特定任务的进度...
11 分钟阅读
在 Java 中处理字符串时,开发人员通常需要将它们分解成更小的部分进行处理或分析。这个过程称为标记化,可以使用各种技术来实现。一种这样的技术是利用 StringTokenizer 类提供的 countTokens() 方法。在此...
阅读 4 分钟
在编程中,排序很重要,因为它将数组的元素按特定顺序排列。最常用的顺序是字母顺序或自然顺序。排序用于规范化(将数据转换为标准形式的过程)数据并生成... (省略了其他部分)
阅读 3 分钟
Java 中 arr.length、arr[0].length 和 arr[1].length 之间的区别 Java 提供了 length 属性来确定数组的长度。每个数组都有一个内置的 length 属性,其值为数组的大小。大小是指数组可以包含的元素总数....
阅读 2 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India