LeetCode 344: 反转字符串

devtools/2025/2/3 12:19:07/

LeetCode 344: 反转字符串 - C语言题解

这道题的目标是反转一个字符数组(字符串)。我们将通过双指针法来实现这一功能。

代码实现

#include <stdio.h>void reverseString(char* s, int sSize) {int left = 0, right = sSize - 1;  // 定义左右指针while (left < right) {  // 当左指针小于右指针时char temp = s[right];  // 临时保存右指针处的字符s[right--] = s[left];  // 将左指针处的字符放到右指针位置,并右指针向左移动s[left++] = temp;  // 将临时保存的字符放到左指针位置,并左指针向右移动}
}int main() {char s[] = "hello";  // 测试字符串int sSize = 5;  // 字符串的长度reverseString(s, sSize);  // 调用反转函数printf("Reversed string: %s\n", s);  // 输出反转后的字符串return 0;
}

代码解析

  1. 函数声明

    void reverseString(char* s, int sSize)
    

    这个函数接受两个参数:

    • s:字符数组(字符串)。
    • sSize:字符数组的长度。
  2. 初始化左右指针

    int left = 0, right = sSize - 1;
    

    我们使用两个指针leftright来标记字符串的左右端,初始时left指向字符串的第一个字符,right指向字符串的最后一个字符。

  3. 循环反转字符

    while (left < right)
    

    这个while循环会继续进行,直到left大于或等于right为止,即两指针交汇时停止。每次循环中,我们会交换leftright位置的字符。

  4. 交换字符

    char temp = s[right];  // 临时保存右指针处的字符
    s[right--] = s[left];   // 将左指针处的字符放到右指针位置,并右指针向左移动
    s[left++] = temp;       // 将临时保存的字符放到左指针位置,并左指针向右移动
    
    • 我们首先将right位置的字符保存在一个临时变量temp中。
    • 然后将left位置的字符赋给right位置,同时右指针向左移动(right--)。
    • 最后将temp中的字符赋给left位置,同时左指针向右移动(left++)。
  5. 主函数

    int main() {char s[] = "hello";int sSize = 5;reverseString(s, sSize);printf("Reversed string: %s\n", s);return 0;
    }
    

    main函数中,我们定义了一个字符数组s,并指定其长度sSize为5。然后调用reverseString函数反转字符串,最后输出反转后的结果。

复杂度分析

  • 时间复杂度 O ( n ) O(n) O(n),其中 n n n是字符串的长度。我们只需要一次遍历来交换字符。
  • 空间复杂度 O ( 1 ) O(1) O(1),我们只使用了常数空间来保存临时字符。

http://www.ppmy.cn/devtools/155712.html

相关文章

一元函数微积分的几何应用:二维平面光滑曲线的曲率公式

文章目录 前言曲率和曲率半径的定义曲率计算公式参数方程形式直角坐标显式方程形式极坐标形式向量形式 前言 本文将介绍二维平面光滑曲线的曲率定义以及不同形式的曲率及曲率半径公式的推导。 曲率和曲率半径的定义 &#xff08;关于二维平面光滑曲线的定义以及弧长公式请参…

使用 Tauri 2 + Next.js 开发跨平台桌面应用实践:Singbox GUI 实践

Singbox GUI 实践 最近用 Tauri Next.js 做了个项目 - Singbox GUI&#xff0c;是个给 sing-box 用的图形界面工具。支持 Windows、Linux 和 macOS。作为第一次接触这两个框架的新手&#xff0c;感觉收获还蛮多的&#xff0c;今天来分享下开发过程中的一些经验~ 为啥要做这个…

流媒体娱乐服务平台在AWS上使用Presto作为大数据的交互式查询引擎的具体流程和代码

一家流媒体娱乐服务平台拥有庞大的用户群体和海量的数据。为了高效处理和分析这些数据&#xff0c;它选择了Presto作为其在AWS EMR上的大数据查询引擎。在AWS EMR上使用Presto取得了显著的成果和收获。这些成果不仅提升了数据查询效率&#xff0c;降低了运维成本&#xff0c;还…

【自学笔记】Java的重点知识点-持续更新

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 Java知识点概览一、Java简介二、Java基本语法三、面向对象编程&#xff08;OOP&#xff09;四、异常处理五、常用类库六、多线程编程七、网络编程 注意事项 总结 Ja…

25.2.2学习内容

通过前序遍历和后序遍历求可能的二叉树的种数&#xff08;AI生成&#xff09;&#xff1a; #include<stdio.h> #include<string.h> #include<stdlib.h> #include<math.h>struct TreeNode {char val;struct TreeNode *left;struct TreeNode *right; };…

Hive详细讲解-概述与环境搭建

文章目录 1.Hive概述1.2.Hive架构原理1.3Driver 2.Hive最小化模式安装部署3.生产环境hive安装部署4.将hive的元数据存储到Mysql5.元数据库概述6.Hive服务的部署6.1HiveServer26.2Metastore 7.HiveServer2使用7.1Metastore嵌入模式配置7.2Metastore独立模式配置* 8.hive常用的参…

开发环境搭建-4:WSL 配置 docker 运行环境

在 WSL 环境中构建&#xff1a;WSL2 (2.3.26.0) Oracle Linux 8.7 官方镜像 基本概念说明 容器技术 利用 Linux 系统的 文件系统&#xff08;UnionFS&#xff09;、命名空间&#xff08;namespace&#xff09;、权限管理&#xff08;cgroup&#xff09;&#xff0c;虚拟出一…

Spring Boot项目如何使用MyBatis实现分页查询

写在前面&#xff1a;大家好&#xff01;我是晴空๓。如果博客中有不足或者的错误的地方欢迎在评论区或者私信我指正&#xff0c;感谢大家的不吝赐教。我的唯一博客更新地址是&#xff1a;https://ac-fun.blog.csdn.net/。非常感谢大家的支持。一起加油&#xff0c;冲鸭&#x…