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

【反转字符串中的单词】

在这里插入图片描述
这个代码实现了字符串中单词顺序的反转,同时保持了每个单词内部的字符顺序。我来详细分析它的思路和工作原理:

思路分析

  1. 整体反转

    reverse(s.begin(), s.end());
    
    • 首先将整个字符串反转,这样单词顺序就反过来了,但每个单词的字母也是反的
    • 例如:“the sky is blue” → “eulb si yks eht”
  2. 逐个单词处理

    for(int i=0; i<n; i++) {if(s[i]!=' ') {// 处理单词}
    }
    
    • 使用双指针法(ij)来识别和处理每个单词
  3. 单词间空格处理

    if(index!=0) s[index++]=' ';
    
    • 如果不是第一个单词,先添加一个空格分隔
    • index跟踪新字符串的写入位置
  4. 单词提取和反转

    int j=i;
    while(j<n && s[j]!=' ') s[index++]=s[j++];
    reverse(s.begin()+index-(j-i), s.begin()+index);
    
    • j指针找到单词结尾
    • 将单词复制到新位置
    • 反转这个单词恢复原始顺序
  5. 调整指针

    i=j;
    
    • 跳过已处理的单词
  6. 截断多余部分

    s.erase(s.begin()+index, s.end());
    
    • 删除处理后多余的部分

class Solution {
public:string reverseWords(string s) {reverse(s.begin(),s.end());int n=s.size();int index=0;for(int i=0;i<n;i++){if(s[i]!=' ' ){if(index!=0)s[index++]=' ';int j=i;while(j<n&&s[j]!=' ')s[index++]=s[j++];reverse(s.begin()+index-(j-i),s.begin()+index);i=j;}}s.erase(s.begin()+index,s.end());return s;}
};
http://www.dtcms.com/a/312402.html

相关文章:

  • 从零开始设计一个分布式KV存储:基于Raft的协程化实现
  • 吴恩达【prompt提示词工程】学习笔记
  • C# async await 实现机制详解
  • GR-3:字节跳动推出40亿参数通用机器人大模型,精确操作提升250%,开启具身智能新纪元!
  • FasrCGI
  • ospf笔记和 综合实验册
  • visual studio code 怎样将主题修改成亮色,并且配置中文界面
  • zookeeper常见命令和常见应用
  • MySQL——运维篇
  • K8S部署ELK(五):集成Kibana实现日志可视化
  • MySQL面试题及详细答案 155道(021-040)
  • 使用Database Navigator插件进行连接sqlite报错invalid or incomplete database
  • 2025年开关电源行业深度解析:从传统应用到新兴赛道的黄金赛道
  • MVC 发布
  • 代码随想录day53图论4
  • trace-cmd记录线程被中断打断的时间
  • 笔试——Day27
  • RabbitMQ面试精讲 Day 10:消息追踪与幂等性保证
  • spring-ai-alibaba 之 graph 槽点
  • 【设计模式】4.装饰器模式
  • 2025-0803学习记录21——地表分类产品的精度验证
  • Github怎么只下载某个目录文件?(Git稀疏检出、GitZip for Github插件、在线工具DownGit)Github下载目录
  • linux2.6 和 unix-v6 源码实验
  • Nginx相关实验(2)
  • 【2025/08/03】GitHub 今日热门项目
  • C# LINQ(LINQ to XML)
  • CAP 理论笔记
  • CUDA杂记--nvcc使用介绍
  • GitHub 趋势日报 (2025年08月02日)
  • 控制建模matlab练习07:比例积分控制-③PI控制器的应用