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

【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.kler.cn/a/377257.html

相关文章:

  • vue中proxy代理配置(测试一)
  • 领克Z20结合AI技术,革新自动驾驶辅助系统
  • 2. SQL窗口函数使用
  • vulnhub靶场-matrix-breakout-2-morpheus攻略(截止至获取shell)
  • 微服务篇-深入了解 XXL-JOB 分布式任务调度的具体使用(XXL-JOB 的工作流程、框架搭建)
  • EasyGBS国标GB28181公网平台P2P远程访问故障诊断:云端服务端排查指南
  • 拿不到kafka消息可能是什么原因?
  • 图像压缩——图像压缩的保真度准则与压缩性能参数
  • 【那些年踩过的坑-前端篇- Mac版本】npm init vite 失败,报错`CERT_HAS_EXPIRED npm ERR
  • Python自动化操作Word文档详解
  • 在VB.NET中,Try...Catch...Finally 和On Error Resume Next有什么区别
  • K8S自建企业私有云方案 单台起配 NVMe全闪存储性能
  • Maven引入记录
  • NPOI 操作详解(操作Excel)
  • 游戏开发与游戏运营:哪个更难?
  • android——渐变色
  • Get包中的依赖管理介绍
  • 【图解版】力扣第70题:爬楼梯
  • 《HelloGitHub》第 103 期
  • 如何在 Ubuntu 16.04 上设置 Jupyter Notebook 来运行 IPython
  • 虚拟机Ubuntu实现和宿主机之间的数据传输(只能复制粘贴,包过)
  • FPGA在高速数据采集系统中的应用!!!
  • 周末总结(2024/11/02)
  • C语言中的希尔排序
  • 如何取消 Jupyter Notebook 的密码和令牌
  • WebGL(Web Graphics Library)