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

C++ LeetCode 力扣刷题 344. 反转字符串

题目

344. 反转字符串

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

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

示例 1:

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

示例 2:

输入:s = ["H","a","n","n","a","h"]
输出:["h","a","n","n","a","H"]

提示:

  • 1 <= s.length <= 105
  • s[i] 都是 ASCII 码表中的可打印字符

代码说明

在这个代码中,s是函数rerverseString的参数,其类型是vector<char>&,表示:

vector<char>:这是C++标准库中的动态字符数组(字符向量),可以理解为一个存储字符的容器,类似字符串(但字符串以空字符'\0'结尾,而vector<char>不需要)。

&:一个引用传递。以为着函数内部对s的修改会直接作用于外部传入的原容器,而不是创建一个副本,这样可以提高效率。

简单来说,s 就是需要被反转的字符序列(比如可能是 "hello" 对应的字符向量 {'h','e','l','l','o'}),函数的作用就是将这个序列反转(比如变成 {'o','l','l','e','h'})。

代码思路

1. 明确问题需求

需要实现一个函数,接收一个字符向量(vector<char>& s),并将其原地反转(即直接修改原向量,不额外创建新容器)。例如:

  • 输入:['h','e','l','l','o']
  • 输出:['o','l','l','e','h']

2. 思考核心逻辑:如何反转序列?

反转的本质是将序列的第一个元素与最后一个元素交换,第二个与倒数第二个交换,以此类推,直到中间位置。

例如,对于长度为 n 的序列,需要交换的位置对是:

  • 第 0 个 和 第 n-1 个
  • 第 1 个 和 第 n-2 个
  • ...
  • 直到两个位置相遇或交叉(即左边位置 >= 右边位置)

3. 选择实现方式:双指针法

这是最直观且高效的方法:

  • 定义两个指针(索引):left 从序列头部开始(初始值 0),right 从序列尾部开始(初始值 s.size() - 1)。
  • 交换 left 和 right 指向的字符。
  • 移动指针:left 向右移(left++),right 向左移(right--)。
  • 重复上述步骤,直到 left >= right(此时所有对称位置已交换完毕)。

4. 考虑边界情况

  • 若序列为空(s.empty())或只有一个元素(s.size() == 1),无需反转,直接返回。
  • 序列长度为偶数或奇数时,双指针的终止条件(left < right)均适用(奇数时中间元素无需交换)。

5. 确定代码结构

  • 初始化双指针 left 和 right
  • 使用 while 循环执行交换和指针移动,循环条件为 left < right
  • 交换操作可直接使用 C++ 标准库的 swap 函数,简洁高效。

基于以上思路,最终可写出双指针实现的代码,满足原地反转、时间复杂度 O(n)(遍历半次序列)、空间复杂度 O(1)(仅用常数额外空间)的要求。

代码内容

class Solution {
public:void reverseString(vector<char>& s) {int left = 0;int right = s.size() - 1;while(left < right){swap(s[left], s[right]);left++;right--;}}
};

http://www.dtcms.com/a/587116.html

相关文章:

  • 抄写diffcloth的源码
  • 龙华建设局网站深圳网站做优化哪家公司好
  • 网站开发php 图片上传失败媒体网站
  • 亿玫网站建设徐州企业建站模板
  • 哪里网站建设公司比较好英德市住房和城乡建设局网站
  • 温州网站开发南通seo网站排名优化
  • 窄带无线信道
  • 郑州直播网站建设公司哪个网站可以免费做招牌
  • 模态框的两种管理思路
  • 正规网站建设哪家好怎样申请网站呢
  • 测试用例~
  • 怎么做培训班网站找商务合作的平台
  • 做卖车网站需要什么手续费为什么招聘网站不能用自己做的简历
  • 昆山网站建设网站宝安网站设计公司
  • 中国可信网站查询丹东市做网站
  • 五大智能锁PK:哪种最适合你家?
  • 怎么用自己的电脑做网站空间电商运营培训课程
  • 江门网站开发多少钱企业备案网站服务内容
  • 北京建设信源咨询有限公司网站杭州发布最新消息
  • 坪山网站建设服务建设摩托车官网报价
  • 空投网站建设2345网址导航是谷歌吗
  • 网站的推广方式组合重庆一般建一个网站需要多少钱
  • 如何建立公众号的步骤网站seo快速优化技巧
  • 购物网站制作多少钱营销客户管理系统
  • 北京网站设计与制作如何让本机做网站让内网访问
  • 无线通信原理
  • 有没有做网站的软件女孩做网站工作辛苦吗
  • 晋安福州网站建设电脑培训班的课程
  • 分糖果算法题
  • 世界最大的购物网站免费的个人简历模板在哪找