剑指 Offer 58 - I. 翻转单词顺序

简介: 剑指 Offer 58 - I. 翻转单词顺序

 剑指 Offer 58 - I. 翻转单词顺序

输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. ",则输出"student. a am I"。

示例 1:

输入: "the sky is blue"

输出: "blue is sky the"


示例 2:

输入: "  hello world!  "

输出: "world! hello"

解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。


示例 3:

输入: "a good   example"

输出: "example good a"

解释: 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。


说明:

    • 无空格字符构成一个单词。
    • 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
    • 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。


    注意:本题与主站 151 题相同:力扣

    注意:此题对比原题有改动


    思路:见注释

      • pre:有效单词的起始位置(不含空格),end:有效单词的结束位置(不含空格)
      • 循环过滤s中每个单词之前的若干个空格,continue掉~
      • 从每个不为空格的首字符开始,遍历s中的每个单词,并逐步倒序拼接res
      • 最后将pre移动到当前遍历完成的单词末尾,准备遍历下一个单词
      • 最后要去掉末尾空格(因为是倒序拼接,因此在第一次遍历单词拼接时末尾会多出一个空格,去掉)


      时间复杂度:O(N)

      空间复杂度:O(1)

      funcreverseWords(sstring) string {
      // 方法1、不利用strings包(推荐)ifs=="" {
      return""    }
      res :=""pre, end, length :=0, 0, len(s)
      forpre<length/*&& end < length*/ {
      // 循环过滤s中每个单词之前的若干个空格,continue掉~ifs[pre] ==' ' { // 用字符的asc码比较(int32类型)pre++continue        } else {
      // 从每个不为空格的首字符开始,遍历s中的每个单词,并逐步倒序拼接resforend=pre; end<length&&s[end] !=' '; end++ {
                  }
      res=s[pre:end] +" "+res// 左闭右开,单词间用空格隔开,倒序拼接    pre=end// 最后将pre移动到当前遍历完成的单词末尾,准备遍历下一个单词        }
          }
      // 去掉末尾空格(因为是倒序拼接,因此在第一次遍历单词拼接时末尾会多出一个空格,去掉)iflen(res) >0 {
      res=res[:len(res)-1]
          }
      returnres// 方法2、利用strings包// sArr := strings.Split(s, " ")// res := make([]string, 0) // for i := len(sArr)-1; i >= 0; i-- {//     r := strings.TrimSpace(sArr[i])//     if len(r) > 0 {//         res = append(res, r)//     }// }// return strings.Join(res, " ")}

      image.gif


      目录
      相关文章
      |
      6月前
      |
      安全 API 算法框架/工具
      大模型文件Docker镜像化部署技术详解
      大模型文件Docker镜像化部署技术详解
      901 2
      |
      11月前
      |
      存储 Kubernetes 监控
      深度解析Kubernetes在微服务架构中的应用与优化
      【10月更文挑战第18天】深度解析Kubernetes在微服务架构中的应用与优化
      411 0
      |
      11月前
      |
      存储 缓存 安全
      https访问提示不安全,证书密钥验证上如何解决
      【10月更文挑战第4天】访问提示不安全,证书密钥验证上如何解决
      1372 2
      |
      Ubuntu Linux 网络安全
      在Linux中,如何配置Samba或NFS文件共享?
      在Linux中,如何配置Samba或NFS文件共享?
      |
      机器学习/深度学习 自然语言处理 机器人
      基于深度学习的智能语音机器人交互系统设计方案
      **摘要** 本项目旨在设计和实现一套基于深度学习的智能语音机器人交互系统,该系统能够准确识别和理解用户的语音指令,提供快速响应,并注重安全性和用户友好性。系统采用分层架构,包括用户层、应用层、服务层和数据层,涉及语音识别、自然语言处理和语音合成等关键技术。深度学习模型,如RNN和LSTM,用于提升识别准确率,微服务架构和云计算技术确保系统的高效性和可扩展性。系统流程涵盖用户注册、语音数据采集、识别、处理和反馈。预期效果是高识别准确率、高效处理和良好的用户体验。未来计划包括系统性能优化和更多应用场景的探索,目标是打造一个适用于智能家居、医疗健康、教育培训等多个领域的智能语音交互解决方案。
      |
      存储 数据挖掘
      YUV色彩空间
      本文介绍 YUV存储格式,什么是色调?什么是色饱和度?人类视觉系统是如何感知YUV的?YUV比RGB好在哪里
      429 0
      |
      数据可视化 大数据
      【透明版九宫格背景图片】仅依靠background的几个属性组合搭配出酷炫的透明背景卡片效果→适用于大数据可视化、数据大屏展示页面
      【透明版九宫格背景图片】仅依靠background的几个属性组合搭配出酷炫的透明背景卡片效果→适用于大数据可视化、数据大屏展示页面
      【透明版九宫格背景图片】仅依靠background的几个属性组合搭配出酷炫的透明背景卡片效果→适用于大数据可视化、数据大屏展示页面
      |
      机器学习/深度学习 人工智能 分布式计算
      因果推断:效应估计的常用方法及工具变量讨论
      日常工作中很多的策略/产品的效果是无法设计完美的随机实验的,要求我们从观察性数据中去(拟合随机试验)发现因果关系、测算因果效应。
      2420 0
      因果推断:效应估计的常用方法及工具变量讨论
      |
      存储 缓存 虚拟化
      五、计算机体系结构及内存分层体系
      五、计算机体系结构及内存分层体系
      五、计算机体系结构及内存分层体系
      |
      机器学习/深度学习 人工智能 自动驾驶
      强化学习算法在游戏、机器人和自动驾驶等领域的应用与实践
      强化学习算法在游戏、机器人和自动驾驶等领域的应用与实践
      663 0
      强化学习算法在游戏、机器人和自动驾驶等领域的应用与实践