当前位置: 首页 > news >正文

反转字符串-双指针法,

在 Java 中,使用 双指针法 反转字符串是一种高效且直观的方法。以下是详细的解析和代码实现。


1. 双指针法的核心思想

  • 使用两个指针:一个指向字符串的起始位置(left),另一个指向字符串的末尾位置(right)。

  • 交换 left 和 right 指针所指向的字符。

  • 逐步向中间移动指针,直到 left 和 right 相遇。


2. 实现步骤

  1. 将字符串转换为字符数组

    • 字符串在 Java 中是不可变的,因此需要将其转换为字符数组 char[] 才能修改。

  2. 初始化指针

    • left 指向数组的起始位置(0)。

    • right 指向数组的末尾位置(length - 1)。

  3. 交换字符并移动指针

    • 交换 left 和 right 指针所指向的字符。

    • 将 left 向右移动一位,right 向左移动一位。

  4. 终止条件

    • 当 left >= right 时,反转完成。


3. 代码实现

以下是使用双指针法反转字符串的 Java 代码:

java

复制

public class ReverseString {public static String reverseString(String s) {// 将字符串转换为字符数组char[] chars = s.toCharArray();// 初始化双指针int left = 0;int right = chars.length - 1;// 交换字符并移动指针while (left < right) {// 交换 left 和 right 指向的字符char temp = chars[left];chars[left] = chars[right];chars[right] = temp;// 移动指针left++;right--;}// 将字符数组转换回字符串return new String(chars);}public static void main(String[] args) {String s = "hello";String reversed_s = reverseString(s);System.out.println(reversed_s);  // 输出: olleh}
}

4. 代码解析

4.1 将字符串转换为字符数组

java

复制

char[] chars = s.toCharArray();
  • 字符串在 Java 中是不可变的,因此需要将其转换为字符数组 char[] 才能修改。

4.2 初始化双指针

java

复制

int left = 0;
int right = chars.length - 1;
  • left 指向数组的起始位置(0)。

  • right 指向数组的末尾位置(length - 1)。

4.3 交换字符并移动指针

java

复制

while (left < right) {char temp = chars[left];chars[left] = chars[right];chars[right] = temp;left++;right--;
}
  • 交换 left 和 right 指针所指向的字符。

  • 将 left 向右移动一位,right 向左移动一位。

4.4 将字符数组转换回字符串

java

复制

return new String(chars);
  • 将修改后的字符数组 char[] 转换回字符串。


5. 示例演示

输入字符串

复制

s = "hello"
反转过程
  1. 初始状态

    复制

    chars = ['h', 'e', 'l', 'l', 'o']
    left = 0, right = 4
  2. 第一次循环

    • 交换 chars[0] 和 chars[4]

      复制

      chars = ['o', 'e', 'l', 'l', 'h']
    • 移动指针:

      复制

      left = 1, right = 3
  3. 第二次循环

    • 交换 chars[1] 和 chars[3]

      复制

      chars = ['o', 'l', 'l', 'e', 'h']
    • 移动指针:

      复制

      left = 2, right = 2
  4. 终止条件

    • left >= right,循环结束。

输出结果

复制

reversed_s = "olleh"

6. 复杂度分析

时间复杂度
  • O(n):需要遍历字符串的一半长度(n/2 次交换操作)。

空间复杂度
  • O(n):需要将字符串转换为字符数组。


7. 总结

  • 双指针法是一种高效的反转字符串方法,时间复杂度为 O(n),空间复杂度为 O(n)。

  • 通过交换字符并移动指针,逐步将字符串反转。

  • 代码简洁直观,适合大多数场景。

通过以上解析和代码实现,可以轻松掌握双指针法反转字符串的核心思想和方法!

http://www.lryc.cn/news/534736.html

相关文章:

  • 亚博microros小车-原生ubuntu支持系列 27、手掌控制小车运动
  • STM32 HAL库 CANbus通讯(C语言)
  • ML.NET库学习005:基于机器学习的客户细分实现与解析
  • (2/100)每日小游戏平台系列
  • 【Linux Oracle】杂货铺 日常实用2024
  • 浏览器的缓存方式几种
  • 黑马React保姆级(PPT+笔记)
  • 2025web寒假作业二
  • 三、OSG学习笔记-应用基础
  • CTFHub-RCE系列wp
  • Linux ping不通百度但浏览器可以打开百度的的解决方法
  • Redis中的某一热点数据缓存过期了,此时有大量请求访问怎么办?
  • 低成本+高性能+超灵活!Deepseek 671B+Milvus重新定义知识库搭建
  • TCP服务器与客户端搭建
  • PDF 文件的安全功能概述
  • 在Linux上部署Jenkins的详细指南
  • 碳纤维复合材料制造的六西格玛管理实践:破解高端制造良率困局的实战密码
  • Day83:图形的绘制
  • C# Dll嵌入到.exe
  • o3-mini、Gemini 2 Flash、Sonnet 3.5 与 DeepSeek 在 Cursor 上的对决
  • 如何在Vscode中接入Deepseek
  • 6 maven工具的使用、maven项目中使用日志
  • Day82:创建图形界面(GUI)
  • 字节跳动大模型应用 Go 开发框架 —— Eino 实践
  • 【Golang学习之旅】Go + MySQL 数据库操作详解
  • Http 的响应码有哪些? 分别代表的是什么?
  • 深入解析 Linux 系统中 Cron 定时任务的配置与管理
  • 关于 IoT DC3 中设备(Device)的理解
  • golang 版 E签宝请求签名鉴权方式
  • QTreeView和QTableView单元格添加超链接