代码随想录算法训练营Day8 | ● 344.反转字符串● 541. 反转字符串II● 54.替换数字● 151.翻转字符串里的单词● 55.右旋转字符串

(记得重学)

● 344.反转字符串

题目:编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。

不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。

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

示例 2:
输入:["H","a","n","n","a","h"]
输出:["h","a","n","n","a","H"]

题目链接:344. 反转字符串

卡哥的视频链接:字符串基础操作! | LeetCode:344.反转字符串

题目思考:和反转链表相似,但是要简单一些

代码示例:

终于有我能一次性直接写出来的题了哈哈哈哈哈哈

代码详解:

  1. 首先,定义了两个变量 leftright,分别表示字符数组的左右两个指针。left 指向数组的第一个字符,而 right 指向数组的最后一个字符。

  2. while 循环中,不断执行以下操作,直到 left 指针大于等于 right 指针:

    • 首先,创建一个临时变量 temp,用于暂存 left 指针指向的字符。
    • 然后,将 right 指针指向的字符赋值给 left 指针指向的位置,实现字符交换。
    • 接着,将 temp 中暂存的字符赋值给 right 指针指向的位置,实现字符交换。
    • 最后,分别将 left 指针和 right 指针向中间移动一位,继续进行下一轮的字符交换。
  3. left 指针不再小于 right 指针时,说明字符数组的所有字符都已经完成了翻转操作,整个循环结束。

这段代码利用了双指针的思想,从字符串的两端开始,逐步向中间移动,交换对应位置上的字符,从而实现了字符串的翻转。这样的算法复杂度为 O(n/2),其中 n 是字符数组的长度。

leetcode提交记录:

小tips:注意数组类型是字符型,新定义temp值的时候别忘了嗷!

● 541. 反转字符串II

题目:给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。

  • 如果剩余字符少于 k 个,则将剩余字符全部反转。
  • 如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。

示例 1:

输入:s = "abcdefg", k = 2
输出:"bacdfeg"

示例 2:

输入:s = "abcd", k = 2
输出:"bacd"

提示:

  • 1 <= s.length <= 104
  • s 仅由小写英文组成
  • 1 <= k <= 104
题目链接:541. 反转字符串 II

卡哥的视频链接:字符串操作进阶! | LeetCode:541. 反转字符串II

题目思考:当需要固定规律一段一段去处理字符串的时候,要想想在在for循环的表达式上做做文章。

代码示例:

代码逻辑详解:

  1. 首先,将字符串 s 转换为字符数组 c,以便后续操作。

  2. for 循环中,以步长为 2*k 遍历字符数组 c,每次迭代都会处理从 i 开始的 k 个字符的反转。这样可以确保每隔 k 个字符进行反转。

  3. 在每次迭代中,首先确定当前要反转的子字符串的起始位置 start,即为 i

  4. 然后,确定当前要反转的子字符串的结束位置 end。由于要求反转 k 个字符,所以 end 的位置为 start + k - 1,但需要注意的是,如果剩余字符数量不足 k 个,则 end 的位置应该取剩余字符的最后一个位置,即 c.length - 1。这里使用了 Math.min() 函数来确保 end 不会超出数组的边界。

  5. 在确定了要反转的子字符串的起始和结束位置之后,使用双指针法对该子字符串进行反转操作。具体操作是交换 startend 指针位置上的字符,然后分别将 start 指针和 end 指针向中间移动,直到两指针相遇为止。

  6. 每次迭代完成后,字符数组 c 中的相应部分已经完成了反转操作。

  7. 最后,将字符数组 c 转换回字符串,并返回结果。

这段代码利用了双指针的思想和循环遍历数组的方法,实现了对字符串每隔 k 个字符进行反转的功能。

leetcode提交记录:

● 54.替换数字

题目:假定一段路径记作字符串 path,其中以 "." 作为分隔符。现需将路径加密,加密方法为将 path 中的分隔符替换为空格 " ",请返回加密后的字符串。

示例 1:

输入:path = "a.aef.qerf.bb"

输出:"a aef qerf bb"

​​

题目链接:LCR 122. 路径加密

题目思考:因为String不可以修改,所以只能申请一段新的空间

代码示例:

● 151.翻转字符串里的单词

给你一个字符串 s ,请你反转字符串中 单词 的顺序。

单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。

返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。

注意:输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。

示例 1:

输入:s = “the sky is blue”
输出:“blue is sky the”

示例 2:

输入:s = " hello world "
输出:“world hello”
解释:反转后的字符串中不能存在前导空格和尾随空格。

示例 3:

输入:s = “a good example”
输出:“example good a”
解释:如果两个单词间有多余的空格,反转后的字符串需要将单词间的空格减少到仅有一个。

思路

1.先移除多余空格

//先用 fast 移除所有空格

//在用 slow 加空格。 除第一个单词外,单词末尾要加空格

//fast 遇到空格或遍历到字符串末尾,就证明遍历完一个单词了

2.将整个字符串反转

参考344反转字符串

3.最后把单词逐个反转

代码示例:

● 55.右旋转字符串

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/571936.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【蓝桥杯2025备赛】集合求和

集合求和 题目描述 给定一个集合 s s s&#xff08;集合元素数量 ≤ 30 \le 30 ≤30&#xff09;&#xff0c;求出此集合所有子集元素之和。 输入格式 集合中的元素&#xff08;元素 ≤ 1000 \le 1000 ≤1000&#xff09; 输出格式 s s s 所有子集元素之和。 样例 #1 …

JAVAEE—HTTP

文章目录 HTTP导读HTTP解析HTTP的格式分析环境准备 HTTP请求格式首行headerHostContent-LengthContent-TypeUser-Agent (简称 UA)RefererCookie 空行body HTTP响应格式认识HTTP的方法POST方法POST和GET的区别第一&#xff1a;用处第二&#xff1a;传递数据第三&#xff1a;GET不…

【漏洞复现】通天星CMSV6车载监控平台Logger未授权漏洞

漏洞描述&#xff1a; 通天星CMSV6车载定位监控平台拥有以位置服务、无线3G/4G视频传输、云存储服务为核心的研发团队&#xff0c;专注于为定位、无线视频终端产品提供平台服务&#xff0c;通天星CMSV6产品覆盖车载录像机、单兵录像机、网络监控摄像机、行驶记录仪等产品的视频…

Sylar C++高性能服务器学习记录05 【线程模块-知识储备篇】

早在19年5月就在某站上看到sylar的视频了&#xff0c;一直认为这是一个非常不错的视频&#xff0c;还有幸加了sylar本人的wx&#xff0c;由于本人一直是自学编程&#xff0c;基础不扎实&#xff0c;也没有任何人的督促&#xff0c;没能坚持下去&#xff0c;每每想起倍感惋惜。恰…

Android IPC | Android多进程模式

前 言 关于Android的进程间通信&#xff08;即IPC&#xff09;有很多种方式&#xff0c;比如我们常用的AIDL、Socket等&#xff0c;而其中最重要而且最需要掌握的就是AIDL的使用和原理&#xff0c;简单来说它是通过Binder实现的。 关于Binder的知识点非常多&#xff0c;当我们…

libtorrent - 安装小记

文章目录 官方文档&#xff1a;libtorrent python binding http://libtorrent.org/python_binding.html 1、下载代码 建议使用&#xff1a; git clone --recurse-submodules https://github.com/arvidn/libtorrent.git如果在 github web 界面下载代码&#xff0c;build 的时候…

sentinel-1.8.7与nacos-2.3.0实现动态规则配置、双向同步

&#x1f60a; 作者&#xff1a; 一恍过去 &#x1f496; 主页&#xff1a; https://blog.csdn.net/zhuocailing3390 &#x1f38a; 社区&#xff1a; Java技术栈交流 &#x1f389; 主题&#xff1a; sentinel-1.8.7与nacos-2.3.0实现动态规则配置、双向同步 ⏱️ 创作时…

FL Studio21.2中文破解版下载2024最新五月破解步骤教程

FL Studio 21.2.3.4004中文版 中文别名水果编曲软件&#xff0c;是一款全能的音乐制作软件&#xff0c;包括编曲、录音、剪辑和混音等诸多功能&#xff0c;让你的电脑编程一个全能的录音室&#xff0c;它为您提供了一个集成的开发环境&#xff0c;使用起来非常简单有效&#xf…

MATLAB命令

MATLAB是一个用于数值计算和数据可视化的交互式程序。您可以通过在命令窗口的MATLAB提示符 ‘>>’ 处键入命令来输入命令。 在本节中&#xff0c;我们将提供常用的通用MATLAB命令列表。 用于管理会话的命令 MATLAB提供了用于管理会话的各种命令。下表提供了所有此类命令…

基于springboot+vue+Mysql的CSGO赛事管理系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

京东商品差评获取

1.背景 场景一&#xff1a;一个市场研究员或者是一个企业的产品经理&#xff0c;需要下载差评来了解消费者对于某一产品或者服务的不满&#xff0c;以便改进他们的产品或服务。 场景二&#xff1a;一个人是某个企业的竞争对手&#xff0c;需要下载差评来了解他们的竞争对手的…

java自动生成pojo,springboot自动生成pojo

第一步 pom引入依赖 <dependencies><!-- mybatis-generator --><dependency><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-core</artifactId><version>1.3.7</version></dependency>&…

乒乓球廉价底板及套胶评测5

今天给同事贴一个银河t2底板&#xff0c;正手狂39度&#xff0c;反手拍里奥&#xff0c;银河t2是碳板&#xff0c;考虑到使用的长期性&#xff0c;没有灌油&#xff0c;用的无机胶水。 这套装备本身没有什么瑕疵&#xff0c;主要还是考虑正手狂三的通透性&#xff0c;我认为有…

QML 中的状态

Qt hello – 专注于Qt的技术分享平台 状态描述了当前用户界面样子&#xff0c;QML中一个状态定义了一组属性的改变&#xff0c;并且会在一定条件下被触发。 假设有这么一个场景&#xff0c;红黄绿三个灯&#xff0c;用一个按钮&#xff0c;点击后依次切换三个灯亮起。使用QWi…

【C++干货基地】深度理解C++中的高效内存管理方式 new delete

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 引入 哈喽各位铁汁们好啊&#xff0c;我是博主鸽芷咕《C干货基地》是由我的襄阳家乡零食基地有感而发&#xff0c;不知道各位的…

星松云新品边缘计算路由器,上网收益两不误

随着互联网的普及和发展&#xff0c;人们对于网络带宽和稳定性的需求日益增加&#xff0c;而同时&#xff0c;对于网络使用的成本也变得越来越重要。在这样的背景下&#xff0c;星松云推出了全新的边缘计算路由器&#xff0c;为用户带来了一个既能享受高速网络&#xff0c;又能…

设计模式(六):原型模式

设计模式&#xff08;六&#xff09;&#xff1a;原型模式 1. 原型模式的介绍2. 原型模式的类图3. 原型模式的实现3.1 创建一个原型接口3.2 创建具体原型3.3 创建一个数据缓存类3.4 测试 1. 原型模式的介绍 原型模式&#xff08;Prototype Pattern&#xff09;属于创建型模式&…

2024 年 Rust 开发者路线图

Rust 近年来因其对性能、安全性和并发性的关注而广受欢迎。作为一名开发人员&#xff0c;掌握 Rust 可以为各种机会打开大门&#xff0c;包括 Web 开发。 在 github 上发现了这个优秀的路线图&#xff0c;由 Anshul Goyal 创建&#xff0c;它提供了一条全面的路径&#xff0c;概…

在RISC-V64架构的CV1811C开发板上应用perf工具进行多线程程序性能分析及火焰图调试

CV1811C环境编译 SDK目录结构 . ├── build // 编译目录,存放编译脚本以及各board差异化配置 ├── buildroot-2021.05 // buildroot开源工具 ├── freertos // freertos系统 ├── fsbl // fsbl启动固件,prebuilt形式存在…

【漏洞复现】通天星CMSV6车载监控平台Druid弱口令漏洞

漏洞描述: 通天星CMSV6车载定位监控平台拥有以位置服务、无线3G/4G视频传输、云存储服务为核心的研发团队,专注于为定位、无线视频终端产品提供平台服务,通天星CMSV6产品覆盖车载录像机、单兵录像机、网络监控摄像机、行驶记录仪等产品的视频综合平台。 通天星CMSV6车载视…