剑指 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


      目录
      相关文章
      |
      消息中间件 存储 Kafka
      Flink---11、状态管理(按键分区状态(值状态、列表状态、Map状态、归约状态、聚合状态)算子状态(列表状态、广播状态))
      Flink---11、状态管理(按键分区状态(值状态、列表状态、Map状态、归约状态、聚合状态)算子状态(列表状态、广播状态))
      |
      8月前
      |
      监控 应用服务中间件 nginx
      基于Zabbix的SLA监控体系构建与实践
      本文由Zabbix社区专家褚凤彬分享,详解SLA在Zabbix中的应用。通过Trigger与Service联动,构建Web应用的多层级监控体系,并介绍SLA计算规则、维护期处理及升级注意事项,助力企业精准掌控服务可用性。
      634 36
      |
      消息中间件 机器学习/深度学习 存储
      字节跳动大数据开发面试题-附答案 (一)
      此面试题来自牛客网友分享的字节跳动应届一面,面试时长一小时。 网友情况:985 本硕。
      2356 0
      字节跳动大数据开发面试题-附答案 (一)
      |
      区块链 开发者
      教程(1):关于如何上链的简单直接的操作教程
      这是一篇关于如何上链的简单直接地操作流程。
      1941 0
      教程(1):关于如何上链的简单直接的操作教程
      |
      存储 人工智能 物联网
      LoRA大模型微调的利器
      LoRA模型是小型的Stable Diffusion模型,它们对checkpoint模型进行微小的调整。它们的体积通常是检查点模型的10到100分之一。因为体积小,效果好,所以lora模型的使用程度比较高。
      LoRA大模型微调的利器
      |
      存储 前端开发 JavaScript
      rsa前端加密后端解密的使用
      rsa前端加密后端解密的使用
      756 0
      |
      机器学习/深度学习 数据采集 存储
      【机器学习】K-近邻算法(KNN)全面解析
      K-近邻算法(K-Nearest Neighbors, KNN)是一种基于实例的学习方法,属于监督学习范畴。它的工作原理简单直观:给定一个训练数据集,对新的输入实例,KNN算法通过计算其与训练集中每个实例的距离,找出距离最近的K个邻居,然后根据这些邻居的类别(对于分类任务)或值(对于回归任务)来预测新实例的类别或值。KNN因其简单高效和无需训练过程的特点,在众多领域中得到广泛应用,如模式识别、推荐系统、图像分类等。
      2151 0
      |
      网络安全 网络虚拟化 数据安全/隐私保护
      Cisco Packet Tracer模拟:ASA5505 IP Sec VPN实验
      Cisco Packet Tracer模拟:ASA5505 IP Sec VPN实验
      1508 1
      Cisco Packet Tracer模拟:ASA5505 IP Sec VPN实验
      |
      Python
      python股票量化交易(8)---K线图:锤头,射击之星,早晨之星
      python股票量化交易(8)---K线图:锤头,射击之星,早晨之星
      1800 0
      python股票量化交易(8)---K线图:锤头,射击之星,早晨之星
      |
      存储 算法 搜索推荐
      软考——软件设计师:第四章:数据结构&算法分析与设计考点总结(完整篇)(下)
      软考——软件设计师:第四章:数据结构&算法分析与设计考点总结(完整篇)(下)
      软考——软件设计师:第四章:数据结构&算法分析与设计考点总结(完整篇)(下)