Day46 反转字符串

ops/2025/2/27 8:05:54/

I.


编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。
不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。

在这里插入图片描述

java">class Solution {public void reverseString(char[] s) {int i = 0, j = s.length - 1;while (i < j) {char temp = s[i];s[i] = s[j];s[j] = temp;i++;j--;}}
}

时间复杂度:O(n)

空间复杂度:O(1)

II.


给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。
如果剩余字符少于 k 个,则将剩余字符全部反转。
如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。

在这里插入图片描述

java">class Solution {public String reverseStr(String s, int k) {// 将字符串转换为字符数组,以便可以修改字符char[] arr = s.toCharArray();// 每次处理2k个字符,所以i每次增加2kfor (int i = 0; i < arr.length; i += 2 * k) {// 反转前k个字符int left = i;int right = Math.min(i + k - 1, arr.length - 1);while (left < right) {char temp = arr[left];arr[left] = arr[right];arr[right] = temp;left++;right--;}}return new String(arr);}
}

时间复杂度: O(n),其中 n 是字符串的长度,因为我们只遍历了一次字符串,并在每次处理时执行常数时间的反转操作。

空间复杂度: O(n),用于存储字符数组。

III.


给定一个字符串 s ,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。

在这里插入图片描述

java">class Solution {public String reverseWords(String s) {char[] arr = s.toCharArray();int left = 0;for (int i = 0; i < arr.length; i++) {if (arr[i] == ' ') {reverse(arr, left, i - 1);left = i + 1;}if (i == arr.length - 1) {reverse(arr, left, i);}}return new String(arr);}public void reverse(char[] arr, int left, int right) {while (left < right) {char temp = arr[left];arr[left] = arr[right];arr[right] = temp;left++;right--;}}
}

时间复杂度: O(n),其中 n 是字符串的长度。我们只遍历了字符数组一次,并在遍历过程中执行了常数时间的反转操作。

空间复杂度: O(n),用于存储字符数组 arr,以及 new String(arr)。


http://www.ppmy.cn/ops/161622.html

相关文章

EtherNet/IP转Modbus基于网关模块实现罗克韦尔PLC与上位机稳定通讯案例

在工业自动化控制系统中&#xff0c;常常会遇到不同品牌和通信协议的设备需要协同工作的情况。本案例中&#xff0c;客户现场采用了 AB PLC&#xff0c;但需要控制的变频器仅支持 Modbus 协议。为了实现 AB PLC 对变频器的有效控制与监控&#xff0c;引入了捷米特 JM-EIP-RTU 网…

R 语言科研绘图第 27 期 --- 密度图-分组

在发表科研论文的过程中&#xff0c;科研绘图是必不可少的&#xff0c;一张好看的图形会是文章很大的加分项。 为了便于使用&#xff0c;本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中&#xff0c;获取方式&#xff1a; R 语言科研绘图模板 --- sciRplothttps://mp.…

使用css的@property规则注册自定义属性结合deepseek完成渐变色融合过渡效果

property 是一个新特性&#xff0c;支持主流浏览器&#xff0c;它允许开发者显式地定义他们的CSS 自定义属性, 允许进行属性类型检查、设定默认值以及定义该自定义属性是否可以被继承&#xff0c;通过一个简单的案例为大家介绍一下property规则的用法&#xff0c;详细的介绍文档…

vscode多文件编译构建(CMake)和调试C++

目录 1. CMake 基础构建工具及作用相关配置文件 2. 配置 tasks.json关键字段详细解释 3. 配置 launch.json关键字段详细解释 4. 配置 CMakeLists.txt关键部分详细解释 5. 构建和调试项目1. 仅构建项目1.1 任务执行顺序1.2 cmake 任务执行详情1.3 build 任务执行详情1.4 构建后的…

Java注解的原理

目录 问题: 作用&#xff1a; 原理&#xff1a; 注解的限制 拓展&#xff1a; 问题: 今天刷面经&#xff0c;发现自己不懂注解的原理&#xff0c;特此记录。 作用&#xff1a; 注解的作用主要是给编译器看的&#xff0c;让它帮忙生成一些代码&#xff0c;或者是帮忙检查…

洛谷 P3628/SPOJ 15648 APIO2010 特别行动队 Commando

题意 你有一支由 n n n 名预备役士兵组成的部队&#xff0c;士兵从 1 1 1 到 n n n 编号&#xff0c;你要将他们拆分成若干特别行动队调入战场。出于默契的考虑&#xff0c;同一支特别行动队中队员的编号应该连续&#xff0c;即为形如 i , i 1 , ⋯ , i k i, i 1, \cdo…

深度学习中卷积层(Conv)、BN层(Batch Normalization)和 ReLU层(Rectified Linear Unit)的详细介绍

一、卷积层&#xff08;Conv&#xff09; 定义 卷积层是深度学习中卷积神经网络&#xff08;CNN&#xff09;的核心组成部分。它通过对输入数据&#xff08;如图像&#xff09;进行卷积操作来提取特征。卷积操作是用一个卷积核&#xff08;也称为滤波器&#xff09;在输入数据上…

华为数通Datacom认证体系详解:从HCIA到HCIE的进阶路径

华为数通Datacom&#xff08;Data Communication&#xff09;课程是华为认证体系中的核心方向之一&#xff0c;聚焦企业网络通信与数据通信技术&#xff0c;适合从事网络规划、部署和运维的人员。 一、数通Datacom课程体系 华为数通Datacom认证分为 三个级别&#xff0c;逐级递…