LeetCode 344.反转字符串

embedded/2024/10/19 3:23:47/

LeetCode 344.反转字符串

1、题目

题目链接: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 码表中的可打印字符

2、双指针

思路

在本题中,我们的目标是反转一个字符数组(即字符串),而且题目要求不能使用任何额外的空间。我们可以使用双指针法:

  1. 初始化双指针
    • 设置两个指针,一个指向数组的开始(称为左指针),另一个指向数组的末尾(称为右指针)。
    • 这两个指针会相向而行,直到它们相遇或交错。
  2. 交换字符:
    • 当左指针小于右指针时,我们交换这两个指针所指向的字符。
    • 交换后,左指针向右移动一步,右指针向左移动一步。
  3. 重复过程:
    • 我们重复上述交换步骤,直到左指针不再小于右指针(即它们相遇或交错)。
    • 由于每次交换都会使两个指针向中间移动一步,因此当它们相遇时,整个数组(字符串)就已经被反转了。
  4. 原地修改:
    • 由于我们直接修改了输入的数组,而没有使用额外的数组或字符串来存储结果,因此这个解决方案是原地修改(in-place)的。
    • 这意味着我们没有分配额外的空间来存储结果,符合题目要求的O(1)额外空间复杂度。
  5. 时间复杂度:
    • 由于每个字符只被交换一次,因此这个算法的时间复杂度是O(n),其中n是数组(字符串)的长度。

代码

class Solution {
public:void reverseString(vector<char>& s) {// 初始化左指针left为0,右指针right为字符串s的最后一个字符的索引for (int left = 0, right = s.size() - 1; left < right; left++, right--) {// 交换左指针和右指针所指向的字符swap(s[left], s[right]);}}
};

复杂度分析

  • 时间复杂度: O(n)
  • 空间复杂度: O(1)

http://www.ppmy.cn/embedded/20793.html

相关文章

Day17.一刷数据结构算法(C语言版) 654最大二叉树;617合并二叉树;700二叉搜索树中的搜索;98验证二叉搜索树

又是破防的一天...... 一.654最大二叉树 又是构造二叉树&#xff0c;昨天大家刚刚做完 中序后序确定二叉树&#xff0c;今天做这个 应该会容易一些&#xff0c; 先看视频&#xff0c;好好体会一下 为什么构造二叉树都是 前序遍历 题目链接&#xff1a;最大二叉树 文章讲解&…

独立搭建UI自动化测试框架分享

今天给大家分享一个seleniumtestngmavenant的UI自动化&#xff0c;可以用于功能测试&#xff0c;也可按复杂的业务流程编写测试用例&#xff0c;今天此篇文章不过多讲解如何实现CI/CD&#xff0c;只讲解自己能独立搭建UI框架&#xff0c;如果有其他好的框架也可以联系我&#x…

基于Flask+Echarts的中药材价格分析与可视化项目

&#x1f388; 博主&#xff1a;一只程序猿子 &#x1f388; 博客主页&#xff1a;一只程序猿子 博客主页 &#x1f388; 个人介绍&#xff1a;爱好(bushi)编程&#xff01; &#x1f388; 创作不易&#xff1a;喜欢的话麻烦您点个&#x1f44d;和⭐&#xff01; &#x1f388;…

记录不熟悉的函数用法(C++)——insert

2. insert 记录起因&#xff1a;接上一篇的例子&#xff0c;不知道为什么使用insert进行插入之前要先执行clear操作&#xff0c;非得这么做吗&#xff1f;我可以认为这个clear操作是对应于为空字符串的&#xff0c;可是仍然纠结insert它具体插入的位置&#xff0c;在后面追加还…

Linux---为什么会有粘滞位?

在前面已经讲过目录的rwx权限&#xff1a; 可读权限(r): 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容. 有可写权限(w):如果目录没有可写权限&#xff0c;则无法在目录中创建文件, 也无法在目录中删除文件.可执行权限(x): 如果目录没有可执行权限, 则无法cd到…

【C++】6-11 停车场收费问题 分数 20

6-11 停车场收费问题 分数 20 全屏浏览 切换布局 作者 徐婉珍 单位 广东东软学院 在停车场收费系统中&#xff0c;收费者会根据车型的不同按不同的单价和计费方式收取不同的停车费&#xff0c;其中&#xff1a; 轿车Car&#xff1a;每小时8元&#xff0c;超过30分钟按一小时…

BootStrap详解

Bootstrap简介 什么是BootStrap&#xff1f; BootStrap来自Twitter&#xff0c;是目前最受欢迎的响应式前端框Bootstrap是基于HTML、CSS、JavaScript的&#xff0c;它简洁灵活&#xff0c;使得Web开发更加快捷 为什么使用Bootstrap&#xff1f; 移动设备优先&#xff1a;自…

vue3学习笔记-快速上手

创建第一个vue3的应用 之前看书学习vue,书籍对应的版本是vue2,今天群里看小伙伴聊天&#xff0c;觉得他们说得对 &#xff0c;反正是从零开始学&#xff0c;而且vue2都不维护了&#xff0c;那为什么不直接学习vue3呢&#xff0c;于是乎&#xff0c;又开启了从0学vue3之路。 参考…