反转字符串-双指针法,
在 Java 中,使用 双指针法 反转字符串是一种高效且直观的方法。以下是详细的解析和代码实现。
1. 双指针法的核心思想
-
使用两个指针:一个指向字符串的起始位置(
left
),另一个指向字符串的末尾位置(right
)。 -
交换
left
和right
指针所指向的字符。 -
逐步向中间移动指针,直到
left
和right
相遇。
2. 实现步骤
-
将字符串转换为字符数组:
-
字符串在 Java 中是不可变的,因此需要将其转换为字符数组
char[]
才能修改。
-
-
初始化指针:
-
left
指向数组的起始位置(0
)。 -
right
指向数组的末尾位置(length - 1
)。
-
-
交换字符并移动指针:
-
交换
left
和right
指针所指向的字符。 -
将
left
向右移动一位,right
向左移动一位。
-
-
终止条件:
-
当
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"
反转过程
-
初始状态:
复制
chars = ['h', 'e', 'l', 'l', 'o'] left = 0, right = 4
-
第一次循环:
-
交换
chars[0]
和chars[4]
:复制
chars = ['o', 'e', 'l', 'l', 'h']
-
移动指针:
复制
left = 1, right = 3
-
-
第二次循环:
-
交换
chars[1]
和chars[3]
:复制
chars = ['o', 'l', 'l', 'e', 'h']
-
移动指针:
复制
left = 2, right = 2
-
-
终止条件:
-
left >= right
,循环结束。
-
输出结果
复制
reversed_s = "olleh"
6. 复杂度分析
时间复杂度
-
O(n):需要遍历字符串的一半长度(
n/2
次交换操作)。
空间复杂度
-
O(n):需要将字符串转换为字符数组。
7. 总结
-
双指针法是一种高效的反转字符串方法,时间复杂度为 O(n),空间复杂度为 O(n)。
-
通过交换字符并移动指针,逐步将字符串反转。
-
代码简洁直观,适合大多数场景。
通过以上解析和代码实现,可以轻松掌握双指针法反转字符串的核心思想和方法!
相关文章:

反转字符串-双指针法,
在 Java 中,使用 双指针法 反转字符串是一种高效且直观的方法。以下是详细的解析和代码实现。 1. 双指针法的核心思想 使用两个指针:一个指向字符串的起始位置(left),另一个指向字符串的末尾位置(right&…...

亚博microros小车-原生ubuntu支持系列 27、手掌控制小车运动
背景知识 本节跟上一个测试类似:亚博microros小车-原生ubuntu支持系列:26手势控制小车基础运动-CSDN博客 都是基于MediaPipe hands做手掌、手指识别的。 为了方便理解,在贴一下手指关键点分布。手掌位置就是靠第9点来识别的。 2、程序说明…...

STM32 HAL库 CANbus通讯(C语言)
#include "main.h" #include "stm32f1xx_hal.h"CAN_HandleTypeDef hcan; CAN_TxHeaderTypeDef TxHeader; CAN_RxHeaderTypeDef RxHeader; uint8_t TxData[8]; uint8_t RxData[8]; uint32_t TxMailbox;void CAN_Init(void) {// 使能CAN时钟__HAL_RCC_CAN1_C…...

ML.NET库学习005:基于机器学习的客户细分实现与解析
文章目录 ML.NET库学习005:基于机器学习的客户细分实现与解析项目主要目的和原理目的原理 项目概述实现的主要功能主要流程步骤使用的主要函数方法关键技术 主要功能和步骤功能详细解读详细步骤解析 数据集及其处理步骤数据集处理步骤关键处理步骤原理1. 数据清洗与…...

(2/100)每日小游戏平台系列
新增一个猜单词小游戏! ------------------------------------------------------------------------------------------------------------------ 猜单词游戏玩法 游戏规则: 游戏会从一个预设的单词列表中随机选择一个单词。玩家有 6 次机会来猜测单…...

【Linux Oracle】杂货铺 日常实用2024
1.跨服务器移动文件 passwd=^T^bxxxx `/usr/bin/expect <<-EOF set timeout -1 spawn scp -r ${BATCH_TIME} sxnhtc@192.168.3.x:${EXP_MCRO_DIR}/ expect "*password:" send "$passwd\r" interact expect eof EOF` curl -k -X GET https://192.16…...

浏览器的缓存方式几种
浏览器的缓存方式主要分为以下几种: 1. 强制缓存(强缓存 / Memory Cache & Disk Cache) 通过 Expires 或 Cache-Control 头部控制。在缓存有效期内,浏览器直接使用缓存,不发起请求。 关键HTTP头: Ex…...

黑马React保姆级(PPT+笔记)
目录 一、react基础 1.进程 2、优势 3、市场 4、搭建脚手架 认识目录 核心依赖(右边两个react) 去除非必要 运行原理: 总结 5、JSX 本质 高频场景 注意编辑 渲染列表 总结 条件渲染 简单情况 复杂情况 事件绑定&#x…...

2025web寒假作业二
一、整体功能概述 该代码构建了一个简单的后台管理系统界面,主要包含左侧导航栏和右侧内容区域。左侧导航栏有 logo、管理员头像、导航菜单和安全退出按钮;右侧内容区域包括页头、用户信息管理内容(含搜索框和用户数据表格)以及页…...

三、OSG学习笔记-应用基础
前一章节:二、OSG学习笔记-入门开发-CSDN博客https://blog.csdn.net/weixin_36323170/article/details/145513874 一、 OsgGA: 界面事件处理空间,处理操作各种操作器的最大名字空间; GUIEventHandler: ui 事件操作类 注意:在启…...

CTFHub-RCE系列wp
目录标题 引言什么是RCE漏洞 eval执行文件包含文件包含php://input读取源代码远程包含 命令注入无过滤过滤cat过滤空格过滤目录分隔符过滤运算符综合过滤练习 引言 题目共有如下类型 什么是RCE漏洞 RCE漏洞,全称是Remote Code Execution漏洞,翻译成中文…...

Linux ping不通百度但浏览器可以打开百度的的解决方法
问题描述:使用ping命令ping www.baidu.com,提示的地址为ipv6地址,但该地址ping不通,但使用浏览器直接打开百度网址可以打开。 问题可能的原因:(1)虚拟机上ipv6为自动模式,影响了ipv4寻址&#…...

Redis中的某一热点数据缓存过期了,此时有大量请求访问怎么办?
1、提前设置热点数据永不过期 2、分布式中用redis分布式锁(锁可以在多个 JVM 实例之间协调)、单体中用synchronized(锁只在同一个 JVM 内有效) 编写服务类 import com.redisson.api.RLock; import com.redisson.api.RedissonCli…...

低成本+高性能+超灵活!Deepseek 671B+Milvus重新定义知识库搭建
“老板说,这个项目得上Deepseek,还得再做个知识库...” 还有哪个开发者,最近没听到这样的抱怨? Deepseek爆火,推理端的智能提速,算力成本急剧下降,让不少原本不想用大模型,用不起大模型的企业&a…...

TCP服务器与客户端搭建
一、思维导图 二、给代码添加链表 【server.c】 #include <stdio.h> #include <sys/socket.h> #include <sys/types.h> #include <fcntl.h> #include <arpa/inet.h> #include <unistd.h> #include <stdlib.h> #include <string.…...

PDF 文件的安全功能概述
由于安全问题始终存在,我们希望重点介绍 PDF 文件格式提供的一些安全功能。如果您希望控制或限制用户可以执行的操作,这些功能可以启用。本文将介绍可以阻止哪些类型的操作,以及可以实施哪些不同的身份验证技术来提高 PDF 的安全性。 可以控制…...

在Linux上部署Jenkins的详细指南
引言 在当今快速迭代的软件开发环境中,持续集成和持续交付(CI/CD)变得越来越重要。Jenkins作为一个开源自动化服务器,能够帮助开发者更高效地进行代码集成、测试和部署。本文将详细介绍如何在Linux系统上安装和配置Jenkins。 准…...

碳纤维复合材料制造的六西格玛管理实践:破解高端制造良率困局的实战密码
碳纤维复合材料制造的六西格玛管理实践:破解高端制造良率困局的实战密码 在全球碳中和与高端制造升级的双重驱动下,碳纤维复合材料行业正经历前爆发式增长。航空航天、新能源汽车、风电叶片等领域对碳纤维产品的性能稳定性提出近乎苛刻的要求࿰…...

Day83:图形的绘制
Python 提供了多种绘图工具,其中最常用的是 Turtle(海龟绘图)和 Matplotlib(数据可视化)。今天,我们主要介绍 Turtle,它可以轻松绘制各种几何图形、艺术图案和动画。 1. Turtle 库简介 Turtle 是 Python 内置的绘图工具,主要用于教学、趣味绘画和简单图形的创建。 基…...

C# Dll嵌入到.exe
将dll属性作为 嵌入的资源 修改引用属性为不复制 增加dll识别来源 AppDomain.CurrentDomain.AssemblyResolve new ResolveEventHandler(CurrentDomain_AssemblyResolve);private static System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, Reso…...

o3-mini、Gemini 2 Flash、Sonnet 3.5 与 DeepSeek 在 Cursor 上的对决
最新的 OpenAI 模型 o3-mini 已于 1 月 31 日(星期五)发布,并已在 Cursor 上架。不久后,Gemini 2 Flash 也会陆续登场。 上周,对 DeepSeek V3、DeepSeek R1 以及 Claude 3.5 Sonnet 做过类似测试。那次测试结果显示&am…...

如何在Vscode中接入Deepseek
一、获取Deepseek APIKEY 首先,登录Deepseek官网的开放平台:DeepSeek 选择API开放平台,然后登录Deepseek后台。 点击左侧菜单栏“API keys”,并创建API key。 需要注意的是,生成API key复制保存到本地,丢失…...

6 maven工具的使用、maven项目中使用日志
文章目录 前言一、maven:一款管理和构建java项目的工具1 基本概念2 maven的安装与配置(1)maven的安装(2)IDEA集成Maven配置当前项目工程设置 maven全局设置 (3)创建一个maven项目 3 pom.xml文件…...

Day82:创建图形界面(GUI)
在 Python 中,我们可以使用 Tkinter(标准 GUI 库)来创建图形用户界面(GUI)。Tkinter 提供了一系列工具和控件,使开发者可以轻松地创建窗口、按钮、输入框等界面组件。 1. Tkinter 简介 Tkinter 是 Python 内置的 GUI 库,使用它可以创建窗口应用程序,而无需安装额外的库…...

字节跳动大模型应用 Go 开发框架 —— Eino 实践
前言 开发基于大模型的软件应用,就像指挥一支足球队:组件是能力各异的队员,编排是灵活多变的战术,数据是流转的足球。Eino 是字节跳动开源的大模型应用开发框架,拥有稳定的内核,灵活的扩展性,完…...

【Golang学习之旅】Go + MySQL 数据库操作详解
文章目录 前言1. GORM简介2. 安装GORM并连接MySQL2.1 安装GORM和MySQL驱动2.2 连接MySQL 3. GORM数据模型(Model)3.1 定义User结构体3.2 自动迁移(AutoMigrate) 4. GORM CRUD 操作4.1 插入数据(Create)4.2 …...

Http 的响应码有哪些? 分别代表的是什么?
HTTP 状态码分为多个类别,下面是常见的 HTTP 状态码及其含义,包括 3xx 重定向状态码的详细区别: 📌 HTTP 状态码分类 分类状态码范围说明1xx100-199信息性状态码,表示请求已被接收,继续处理2xx200-299成功…...

深入解析 Linux 系统中 Cron 定时任务的配置与管理
在 Linux 和类 Unix 系统中,cron 是一个非常强大的工具,用于定时执行各种任务,例如自动备份、定时运行脚本和定期清理日志文件。通过合理配置 cron,你可以让很多系统维护任务自动化,从而减轻日常管理的压力。而 cronta…...

关于 IoT DC3 中设备(Device)的理解
在物联网系统中,设备(Device)是一个非常宽泛的概念,它可以指代任何能够接入系统并进行数据交互的实体。包括但不限于手机、电脑、服务器、网关、硬件设备甚至是某些软件程序等所有能接入到该平台的媒介。 内容 定义 目的 示例 …...

golang 版 E签宝请求签名鉴权方式
E签宝 请求签名鉴权方式说明 package utilsimport ("crypto/hmac""crypto/md5""crypto/sha256""encoding/base64""fmt""github.com/gogf/gf/v2/util/gconv" )type Sign struct {secret string }func NewSign(sec…...