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

【OJ题解】C++实现反转字符串中的每个单词

💵个人主页: 起名字真南
💵个人专栏:【数据结构初阶】 【C语言】 【C++】 【OJ题解】

请添加图片描述

题目要求:给定一个字符串 s ,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。

题目链接: 反转字符串中的所有单词

反转字符串中每个单词的字符顺序

题目描述

给定一个字符串 s,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。

示例

  • 输入:s = "Let's take LeetCode contest"

  • 输出:"s'teL ekat edoCteeL tsetnoc"

  • 输入:s = "Mr Ding"

  • 输出:"rM gniD"

解题思路

  1. 识别单词

    • 首先需要遍历字符串,找到每个单词的起始和结束位置。单词由字母组成,空格用来分隔单词。
  2. 反转单词

    • 对于每个找到的单词,利用字符串反转的功能,将单词的字符顺序进行反转。
  3. 构建结果

    • 在保持原有空格和单词顺序的基础上,将反转后的单词拼接成最终的结果字符串。
  4. 边界处理

    • 需要考虑多个空格的情况,确保反转后的字符串仍然保留原始的空格格式。

具体实现步骤

  1. 使用 stringstream 或直接遍历字符串来识别单词。
  2. 将每个单词反转,并存储在一个结果字符串中。
  3. 将结果字符串中的单词拼接在一起,并保持空格的原始位置。

C++ 示例代码

以下是根据上述思路实现的 C++ 代码:

#include <iostream>
#include <string>
#include <sstream>
using namespace std;class Solution {
public:string reverseWords(string s) {stringstream ss(s);string word;string result;while (ss >> word) { // 逐个读取单词reverse(word.begin(), word.end()); // 反转单词result += word + " "; // 拼接反转后的单词}if (!result.empty()) {result.pop_back(); // 移除最后多余的空格}return result;}
};int main() {Solution solution;string s = "Let's take LeetCode contest";string result = solution.reverseWords(s);cout << result << endl; // 输出: "s'teL ekat edoCteeL tsetnoc"return 0;
}

代码解析

  • stringstream:用于便捷地读取字符串中的单词。
  • reverse:C++ STL 提供的反转功能,用于反转单个单词。
  • 结果拼接:将反转后的单词拼接到结果字符串中,并在每个单词后加上空格,最后再移除多余的空格。

总结

这个算法的时间复杂度为 O(n),其中 n 是字符串 s 的长度。通过这种方式,我们不仅实现了题目的要求,还保持了原始字符串的结构与格式。

http://www.lryc.cn/news/475300.html

相关文章:

  • 万字长文详解Hive聚合函数 grouping sets、cube、rollup原理、语法、案例和优化
  • 数列分块入门
  • SPRD Android 14 Launcher 3 中添加长按桌面图标启动自由窗口模式功能
  • WebSocket详解:从前端到后端的全栈理解
  • SOLIDWORKS 2025加快装配体设计 确保可制造性
  • 简单题:计算从位置 x 到 y 的最少步数| 豆包MarsCode AI刷题
  • HTML 基础标签——表单标签<form>
  • LeetCode 每日一题 2024/10/28-2024/11/3
  • 基于Spring Boot和Vue的电子商城系统功能设计
  • 成都睿明智科技有限公司正规吗靠谱吗?
  • 【天线&化学】航拍图屋顶异常检测系统源码&数据集全套:改进yolo11-ContextGuided
  • 【回忆】JavaScript 中的 Map 有哪些方法
  • Chrome与夸克的安全性对比
  • 使用Python可视化支持向量机(SVM)
  • C++泛型编程
  • 【论文分享】利用大量街景图片研究街道空间质量与建筑环境属性之间的关联
  • 【Linux第七课--基础IO】内存级文件、重定向、缓冲区、文件系统、动态库静态库
  • 对比C/C++语言,Rust语言有什么优势?
  • Rust语言有哪些数据类型?
  • 【论文笔记】Attention Prompting on Image for Large Vision-Language Models
  • VScode设置系统界面字体
  • Java中常见的异常类型
  • Java学习Day58:相声二人组!(项目统计数据Excel图表导出)
  • springboot 自动装配和bean注入原理及实现
  • 解决Redis缓存穿透(缓存空对象、布隆过滤器)
  • 初探Flink的序列化
  • QT 机器视觉 (3. 虚拟相机SDK、测试工具)
  • 1分钟解决Excel打开CSV文件出现乱码问题
  • 基于SpringBoot+Vue的仓库管理系统【前后端分离】
  • vue和django接口联调