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

剑指offer59_翻转单词顺序

翻转单词顺序


输入一个英文句子,单词之间用一个空格隔开,且句首和句尾没有多余空格

翻转句子中单词的顺序,但单词内字符的顺序不变。

为简单起见,标点符号和普通字母一样处理。

例如输入字符串"I am a student.",则输出"student. a am I"

数据范围

输入字符串长度 [0,1000]。

样例
输入:"I am a student."输出:"student. a am I"

算法思路

  1. 首先反转整个字符串
  2. 然后逐个识别单词并再次反转每个单词
  3. 通过双指针法(i和j)定位每个单词的起始和结束位置
  • 时间复杂度: O(n)
    • 第一次整体反转:O(n)
    • 单词识别和反转:O(n)(每个字符最多被访问两次)
  • 空间复杂度: O(1)
    • 原地操作,没有使用额外空间(除了几个临时变量)
class Solution {
public:string reverseWords(string s) {// 第一步:反转整个字符串reverse(s.begin(), s.end());// 第二步:逐个识别并反转每个单词for(int i = 0; i < s.size(); i ++){if(s[i] == ' ') continue; // 跳过空格// 定位单词结束位置(下一个空格或字符串结尾)int j = i + 1;while(j < s.size() && s[j] != ' ') j++;// 反转当前单词reverse(s.begin() + i, s.begin() + j);i = j; // 跳过已处理的单词}return s;}
};

实例演示

示例1:输入 “hello world”
  1. 整体反转:"dlrow olleh"
  2. 反转单词:
    • 第一个单词 “dlrow” → “world”
    • 第二个单词 “olleh” → “hello”
  3. 最终结果:"world hello"
示例2:输入 “the sky is blue”
  1. 整体反转:"eulb si yks eht"
  2. 反转单词:
    • “eulb” → “blue”
    • “si” → “is”
    • “yks” → “sky”
    • “eht” → “the”
  3. 最终结果:"blue is sky the"
示例3:输入 " a good example "
  1. 整体反转:" elpmaxe doog a "
  2. 反转单词:
    • “elpmaxe” → “example”
    • “doog” → “good”
    • “a” → “a”
  3. 最终结果:"example good a"(注意空格被保留在原位)

边界情况处理

  • 前导/后置空格:保留在原位
  • 连续多个空格:保留原样
  • 单个单词:效果等同于字符串反转
  • 空字符串:直接返回
http://www.dtcms.com/a/277189.html

相关文章:

  • Redis 命令总结
  • Docker三剑客
  • Docker 基于 Cgroups 实现资源限制详解【实战+源码】
  • 从一个想法到一套软件——我的AI质检平台设计蓝图
  • 03.Python 字符串中的空白字符处理
  • 【爬虫】02 - 静态页面的抓取和解析
  • HTTP与HTTPS详解
  • 面试150 填充每个节点的下一个右侧节点指针Ⅱ
  • python函数快捷的传变量地址
  • 2025江苏省信息安全管理与评估赛项二三阶段任务书
  • docker 设置代理以及配置镜像加速
  • 【C++】优先队列简介与模拟实现 + 仿函数
  • Matplotlib(一)- 数据可视化与Matplotlib
  • 关于数据库的慢查询
  • python3的可变参数如何传递元组和字典
  • 一文讲懂填充与步幅
  • 《Google 软件工程》:如何写好文档?
  • 3. 【Blazor全栈开发实战指南】--Blazor是什么?为什么选择Blazor?
  • 在AI应用中Prompt撰写重要却难掌握,‘理解模型与行业知识是关键’:提升迫在眉睫
  • 【读书笔记】《Effective Modern C++》第4章 Smart Pointers
  • Node.js 聊天内容加密解密实战教程(含缓存密钥优化)
  • 4. 关于CEF3 使用的一些记录及仓颉端封装的情况
  • 手写muduo笔记
  • package.json 与 package-lock.json
  • 笔记/sklearn中的数据划分方法
  • 流程控制:从基础结构到跨语言实践与优化
  • 博客项目 laravel vue mysql 第五章 标签功能
  • 前端性能优化利器:懒加载技术原理与最佳实践
  • JAVA JVM虚拟线程
  • 第三章-提示词-解锁Prompt提示词工程核销逻辑,开启高效AI交互(10/36)