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

代码随想录刷题-字符串-反转字符串

文章目录

    • 反转字符串
      • 习题
      • 双指针
      • swap 的两种方式

反转字符串

本节对应代码随想录中:代码随想录,讲解视频:字符串基础操作! | LeetCode:344.反转字符串_哔哩哔哩_bilibili

习题

题目链接:344. 反转字符串 - 力扣(LeetCode)

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

示例 1:
输入:s = ["h","e","l","l","o"]
输出:["o","l","l","e","h"]

双指针

作为数组的第一题,这题还是比较简单的。反转字符串其实就是原来第一个字符变成最后一个字符,原来第二个字符变成倒数第二个字符,以此类推。那其实就是将第一个与最后一个字符交换,将第二个与倒数第二个字符交换,以此类推。并且我们只需要遍历字符串一半的长度就行交换即可。

class Solution {public:void reverseString(vector<char>& s) {int size = s.size();for (int i = 0, j = size - 1; i < size / 2; i++, j--) {swap(s[i], s[j]);}}
};
  • 时间复杂度:O(nnn)。有一个 for 循环,它的迭代次数是数组大小的一半,即 O(n/2),swap 函数交换了两个元素的值,其时间复杂度为 O(1)。因此,这个函数的时间复杂度为 O(n/2 * 1),也就是 O(n)
  • 空间复杂度:O(111)。只使用了常量级别的额外空间存储变量 i、j 和 size,因此空间复杂度为 O(1)

对于本题,其实使用库函数 reverse 就能解题,但显然本题并不是考察库函数的使用,面试的时候更不会如此。但是必须要了解可以使用什么库函数来实现,代码如下:

class Solution {public:void reverseString(vector<char>& s) {reverse(s.begin(),s.end());}
};
  • 时间复杂度:O(nnn)。只调用了一次 C++ 标准库中的 reverse 函数,其时间复杂度为 O(n),其中 n 是数组的大小
  • 空间复杂度:O(111)。没有使用任何额外的内存来存储变量,所以空间复杂度是 O(1)

swap 的两种方式

第一种是比较常见的方式

int tmp = s[i];
s[i] = s[j];
s[j] = tmp;

第二种是通过位运算

int a = 5; // 101
int b = 7; // 111
a ^= b; // 此时 a 的值为 2(101^111=010)
b ^= a; // 此时 b 的值为 5(010^111即(101^111)^111=101)
a ^= b; // 此时 a 的值为 7(010^101即(101^111)^101=111)

解释:利用异或运算符的特性(一个数异或同一个数两次会得到原始的值),这个交换操作不需要临时变量,比第一种方法更快,尤其是在处理大型数据集时。但要注意的是,这种方式只适用于整型数据类型,对于其他类型,例如浮点数、字符或自定义对象等,则需要采用其他方法进行交换。

解题的时候一般的交换元素可以直接用 swap 函数即 swap(a,b)

相关文章:

代码随想录刷题-字符串-反转字符串

文章目录反转字符串习题双指针swap 的两种方式反转字符串 本节对应代码随想录中&#xff1a;代码随想录&#xff0c;讲解视频&#xff1a;字符串基础操作&#xff01; | LeetCode&#xff1a;344.反转字符串_哔哩哔哩_bilibili 习题 题目链接&#xff1a;344. 反转字符串 - …...

14-链表练习-剑指 Offer II 021. 删除链表的倒数第 n 个结点

题目 给定一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], n 2 输出&#xff1a;[1,2,3,5] 示例 2&#xff1a; 输入&#xff1a;head [1], n 1 输出&#xff1a;[] 示例 3&…...

用Java解决华为OD机试考题,真的高效,真的强,来吧,清单奉上,祝你上岸

华为 OD 机试题最新&#xff08;Java&#xff09;清单&#xff08;机试题库还在逐日更新&#xff09; 题库目录 直接在本页使用 CtrlF&#xff0c;输入题目名称就可以进行检索。 序号文章分值1【华为OD机试真题JAVA】快递装载问题_国服第二切图仔的博客-CSDN博客1002【华为…...

【Stable Diffusion】Stable Diffusion免安装在线部署教程

一、开启Google Colab网址 官网&#xff1a;https://colab.research.google.com/ 点击添加代码&#xff1a; 二、执行如下代码指令 !pip install --upgrade fastapi0.90.1 !git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui !git clone https://github.…...

Jetson设备如何接调试串口工具查看内核打印信息

方便小白使用如下教程。 一、认识USB转串口调试工具转接小板 和硬件连接方式 如图&#xff0c;是一款USB TO TTL转换板&#xff0c;这款小板支持3种供电模式&#xff1a;对外输出5V、对外输出3.3V和由外部供电。正面有一个跳帽&#xff0c;跳帽跳到3V3&#xff0c;小板由US…...

一直被低估的美图,正悄悄成为AIGC领跑者

【潮汐商业评论/原创】 也许多年之后再回望历史&#xff0c;2023年将被视为标志性的一年。它不仅是疫情之后的复苏之年&#xff0c;更是人工智能在中国乃至全球迎来爆发的一年。 从来没有这样的景象——在2023年的前3个月&#xff0c;全球互联网被AIGC话题“刷屏”&#xff0…...

JAVA开发与运维(JavaWeb测试环境搭建)

本例子测试环境搭建在腾讯云平台之上。 系统架构&#xff1a; 微服务EurekaApollogateWayredisrocketMqOSSsparkETLmysqlpgsqlclickHouseSLB. 首先需要申请的云资源。 业务用途CPUMEMDisk数量云产品规格服务器应用服务&#xff08;部署微服务&#xff09;4核8G500G1CVMS6.L…...

python 的range函数你需要知道三件事

python 的range函数你需要知道三件事python 的range() 函数你需要知道三件事一、range函数的功能和语法二、range函数转化为数组三、range函数与for语句的应用python 的range() 函数你需要知道三件事 一、range函数的功能和语法 **1、range函数的功能&#xff1a;**range&…...

穿越周期的进击,科沃斯“敢”于变革

文|智能相对论 作者|佘凯文 什么样的扫地机器人才是一款好的扫地机器人&#xff1f; 回答这个问题我们首先要明白扫地机器人的产品逻辑究竟是什么。简单来说&#xff0c;就是替代人们完成一定环境内的清洁工作&#xff0c;它能完成的“清洁程度”越深则代表其产品力越强。 …...

不使用IF语句对一组数进行排序的分析和实现

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言一、不使用IF语句的两数排序方法二、不使用IF的多数排序讨论1、三数比较和排序2、多个数据比较和排序总结前言 这个题目源于已经完成了不使用IF语句对两个数的比…...

在大厂做了5年测试,3月被无情辞退,想给摸鱼的兄弟提个醒

先简单交代一下背景吧&#xff0c;某不知名 985 的本硕&#xff0c;17 年毕业加入字节&#xff0c;以“人员优化”的名义无情被裁员&#xff0c;之后跳槽到了有赞&#xff0c;一直从事软件测试的工作。之前没有实习经历&#xff0c;算是5年的工作经验吧。 这5年之间完成了一次…...

【职业规划】第二篇:程序员分级之中级程序员

Java程序员的分级并没有统一的标准,以下列举出来的只是我所理解的关于Java工程师的划分标准,不喜勿喷,如有建议,欢迎评论或私信。 二、Java中级程序员(又名:Java中级工程师/Java中级开发) 1.级别介绍与职责 简单一句话总结中级程序员就是:知道是什么。 具体些就是,…...

Studio One没有声音怎么办 Studio One工程没有声音

Studio One是一款非常优秀编曲软件&#xff0c;能够帮助用户高效的进行编曲和创作&#xff0c;也是目前主流的通道机架软件之一&#xff0c;受到很多音乐编曲爱好者的追捧。但是很多刚接触这款软件的小伙伴会碰到这样或者那样的问题&#xff0c;比如Stuidio one没有声音怎么办&…...

x86架构利用docker去编译arm64的应用程序

文章目录1. 交叉编译&#xff1a;toolchain2. 隔离挂载的方式&#xff1a;3. QEMU 或其他模拟器来实际运行dockerx86架构实现多平台系统代码的编译&#xff0c;实现方式有多种&#xff1a;交叉编译&#xff1a;toolchain 【新的第三方库不好处理】隔离挂载的方式 【速度慢&…...

华为OD机试题 - 优秀学员统计(JavaScript)| 机考必刷

更多题库,搜索引擎搜 梦想橡皮擦华为OD 👑👑👑 更多华为OD题库,搜 梦想橡皮擦 华为OD 👑👑👑 更多华为机考题库,搜 梦想橡皮擦华为OD 👑👑👑 最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为…...

Nginx学习(7)—— 过滤模块(filter)

文章目录过滤模块简介执行时间和内容执行顺序Nginx是怎么按照次序依次来执行各个过滤模块的呢这些过滤模块的简述&#xff08;按执行顺序&#xff09;模块编译过滤模块分析相关结构体响应头过滤函数响应体过滤函数主要功能介绍发出子请求优化措施过滤模块简介 执行时间和内容 …...

【创作赢红包】

1、IoC\nIoC&#xff08;Inversion of Control&#xff0c;控制反转&#xff09;是一种软件设计思想&#xff0c;它的核心思想是将对象之间的依赖关系交给容器来管理&#xff0c;从而降低对象之间的耦合度&#xff0c;提高代码的灵活性和可维护性。\n\n在传统的编程模式中&…...

Mybatis入门

1. 框架 框架相当于是一个脚手架&#xff0c;内部已经写好了很多代码&#xff0c;我们只要其基础上进行开发就可以提高我们的开发效率 框架阶段学习&#xff1a; ①先去学习如何使用框架 ②然后再使用熟练的情况下去猜测内部的原理 ③通过源码去验证自己的猜测。 2.Mybat…...

金色传说:SAP-PP-CO01/CO02 生产订单下达保存时报错:用户状态 新建 是活动的 (ORD %00000000001) 消息号BS014

文章目录问题描述一、原因分析&#xff1a;二、解决方案&#xff1a;总结问题描述 某一特殊订单类型的生产订单下达保存时,出现报错提示:用户状态 新建 是活动的 (ORD %00000000001) 报错的消息号为BS014 一、原因分析&#xff1a; 既然是某一特殊订单类型才出现报错,那么问…...

@Transactional和synchronized同时使用时的一些问题以及解决

Transactional和synchronized同时使用并不能保证事务一致性背景任何事情都有一个发生背景有个需求【一个业务里面包含多个事务,而且还需要避免其他线程的影响,所幸的是该服务只需要启动单实例,不然还要考虑分布式的影响】我的思路就是用Transactional 和 synchronized来保证事务…...

在RK3576开发板上手把手编译并运行你的第一个MPP编码程序(含VSCode配置避坑)

在RK3576开发板上从零构建MPP编码开发环境的完整指南 1. 开发环境准备与交叉编译工具链配置 对于嵌入式开发者而言&#xff0c;RK3576开发板的MPP开发环境搭建需要从基础工具链开始。不同于x86平台的开发&#xff0c;我们需要特别注意交叉编译环境的配置细节。 首先需要获取适用…...

后端架构师转型AI智能体架构师:3个月实战路径,收藏这份落地指南

如果你本身就是后端/全栈/架构师出身&#xff0c;这意味着你已经有了一套非常扎实的“确定性系统”的构建能力——分布式、高并发、数据库事务、系统稳定性&#xff0c;这些都是你的底牌。 而AI智能体恰恰是“不确定性系统”&#xff08;大模型&#xff09;与“确定性系统”&am…...

【SpringBoot】scanBasePackages实战:从默认扫描到精准控制的进阶指南

1. 为什么需要自定义组件扫描路径 第一次用SpringBoot开发项目时&#xff0c;我发现只要把启动类放在顶层包下&#xff0c;所有子包的组件都能自动注册。这种"开箱即用"的特性确实方便&#xff0c;但后来接手一个老项目时遇到了问题&#xff1a;启动耗时长达2分钟&am…...

【架构实战】架构师成长路线图

一、架构师的核心能力 架构师不是只会画图的技术人&#xff0c;而是能在技术、业务、团队之间找到平衡点的综合型人才。 技术深度 精通至少一个技术领域理解底层原理&#xff0c;不浮于表面持续跟踪新技术趋势 系统思维 全局视角看问题懂得权衡&#xff08;Trade-off&#xff0…...

基于dify智能客服工作流的多智能体架构实战:高并发场景下的设计与优化

背景痛点&#xff1a;当智能客服遭遇流量洪峰 最近在负责一个电商大促期间的智能客服系统保障&#xff0c;真切体会到了传统单体智能体架构的“力不从心”。我们的客服机器人基于一个大语言模型构建&#xff0c;平时QPS在50左右时&#xff0c;响应时间&#xff08;RT&#xff0…...

大模型赋能多尺度空间智能:从具身感知到地球系统建模的跨学科探索

1. 大模型如何重构空间智能的认知框架 当AlphaGo击败人类棋手时&#xff0c;我们惊叹于AI的策略能力&#xff1b;但当大语言模型开始理解三维空间关系时&#xff0c;这标志着机器认知的质变。空间智能的本质是理解物体间的相对位置、距离和运动规律&#xff0c;这种能力对人类而…...

行业观察2026年3月五家geo优化服务商实测对比与选型决策指南

在2026年3月的智能商业环境中&#xff0c;企业竞争的焦点已从信息曝光转向认知塑造。随着生成式AI全面接管用户的信息获取与决策流程&#xff0c;品牌若无法在AI的“思考”过程中占据一席之地&#xff0c;便意味着在未来的商业对话中失语。第三方独立数据显示&#xff0c;2025年…...

从零开始学流程图:GESP C++二级考试中的三种基本结构详解

从零开始学流程图&#xff1a;GESP C二级考试中的三种基本结构详解 在编程学习的道路上&#xff0c;流程图就像是一张清晰的地图&#xff0c;能够帮助初学者直观地理解程序运行的逻辑路径。特别是对于准备GESP C二级考试的考生来说&#xff0c;掌握流程图的绘制和解读技巧&…...

不止于集成:在RuoYi-Camunda流程设计器中实现自定义属性面板与FEEL表达式校验

深度定制RuoYi-Camunda流程设计器&#xff1a;从属性面板扩展到FEEL表达式校验实战 当标准BPMN设计器无法满足复杂业务需求时&#xff0c;定制化开发成为必经之路。某跨国零售企业的审批系统曾因无法在流程节点上定义"区域经理审批阈值"字段&#xff0c;导致每次业务…...

LibreOffice无界面转换实战:用Python在Linux服务器实现DOCX批量转PDF

LibreOffice无界面转换实战&#xff1a;用Python在Linux服务器实现DOCX批量转PDF 在当今企业级文档处理流程中&#xff0c;自动化转换办公文档格式已成为提升效率的关键环节。对于部署在Linux服务器上的文档处理系统而言&#xff0c;如何在不依赖图形界面的情况下&#xff0c;稳…...