当前位置: 首页 > 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来保证事务…...

轻量级容器化部署工具Ship:简化中小团队应用部署流程

1. 项目概述&#xff1a;一个面向开发者的轻量级容器化部署工具最近在和朋友聊起中小团队或个人开发者的部署痛点时&#xff0c;大家普遍觉得&#xff0c;虽然Kubernetes&#xff08;K8s&#xff09;生态强大&#xff0c;但对于一个快速迭代的独立项目或小团队来说&#xff0c;…...

终极指南:如何将ideas-for-projects-people-would-use中的创意变为现实

终极指南&#xff1a;如何将ideas-for-projects-people-would-use中的创意变为现实 【免费下载链接】ideas-for-projects-people-would-use Every time I have an idea, I write it down. These are a collection of my top software ideas -- problems I think enough people …...

十分钟速通:GO、KEGG、COG注释与富集分析的实战指南

1. 从测序数据到功能注释的快速通道 刚拿到高通量测序数据的同学&#xff0c;面对海量基因序列时总会陷入迷茫&#xff1a;这些基因到底有什么功能&#xff1f;它们参与了哪些生物过程&#xff1f;这时候GO、KEGG和COG三大注释工具就是你的"基因翻译官"。我处理过上百…...

Free List Allocator实现原理:memory-allocators中的通用内存分配器

Free List Allocator实现原理&#xff1a;memory-allocators中的通用内存分配器 【免费下载链接】memory-allocators Custom memory allocators in C to improve the performance of dynamic memory allocation 项目地址: https://gitcode.com/gh_mirrors/me/memory-allocato…...

德国工业4.0工程师指南:从系统融合到职业发展

1. 项目概述&#xff1a;为什么德国是工业工程师的理想目的地&#xff1f;如果你是一名工业、自动化或机器人领域的工程师&#xff0c;正在寻找一个能将你的技术抱负与前沿产业实践深度结合的职业舞台&#xff0c;那么德国很可能就是你一直在寻找的答案。这不仅仅是因为德国拥有…...

Axolotl与LLaMA-Factory对比:架构与扩展性分析-方案选型对比

1. 问题背景与选型目标 在大型语言模型&#xff08;LLM&#xff09;落地的浪潮中&#xff0c;“微调”已从少数研究团队的实验行为&#xff0c;变为大量中小企业甚至个人开发者的刚需。业务团队不再仅仅使用 API 调用闭源模型&#xff0c;而是希望基于开源基座模型&#xff08;…...

3分钟掌握百度网盘秒传技术:彻底解决文件分享失效难题

3分钟掌握百度网盘秒传技术&#xff1a;彻底解决文件分享失效难题 【免费下载链接】rapid-upload-userscript-doc 秒传链接提取脚本 - 文档&教程 项目地址: https://gitcode.com/gh_mirrors/ra/rapid-upload-userscript-doc 在数字化协作时代&#xff0c;百度网盘秒…...

终极指南:如何使用qmcdump轻松解密QQ音乐加密音频文件

终极指南&#xff1a;如何使用qmcdump轻松解密QQ音乐加密音频文件 【免费下载链接】qmcdump 一个简单的QQ音乐解码&#xff08;qmcflac/qmc0/qmc3 转 flac/mp3&#xff09;&#xff0c;仅为个人学习参考用。 项目地址: https://gitcode.com/gh_mirrors/qm/qmcdump 你是否…...

用Yii2快速构建微服务RESTful API全攻略

...

AI建站+全链路运营,让你一个人活成一个团队

AI建站全链路运营&#xff0c;让你一个人活成一个团队去年这个时候&#xff0c;我为了搞独立站&#xff0c;头发掉了不少。那时候我觉得&#xff0c;只要网站做得漂亮&#xff0c;订单就会像雪花一样飞来。结果呢&#xff1f;网站是上线了&#xff0c;但支付接不通&#xff0c;…...