给你一个字符串 s ,逐个翻转字符串中的所有 单词

单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。

请你返回一个翻转 s 中单词顺序并用单个空格相连的字符串。

说明:

  • 输入字符串 s 可以在前面、后面或者单词间包含多余的空格。
  • 翻转后单词间应当仅用一个空格分隔。
  • 翻转后的字符串中不应包含额外的空格。

示例 1:

输入:s = "the sky is blue"
输出:"blue is sky the"

示例 2:

输入:s = "  hello world  "
输出:"world hello"
解释:输入字符串可以在前面或者后面包含多余的空格,但是翻转后的字符不能包括。

示例 3:

输入:s = "a good   example"
输出:"example good a"
解释:如果两个单词间有多余的空格,将翻转后单词间的空格减少到只含一个。

示例 4:

输入:s = "  Bob    Loves  Alice   "
输出:"Alice Loves Bob"

示例 5:

输入:s = "Alice does not even like bob"
输出:"bob like even not does Alice"

提示:

  • 1 <= s.length <= 104
  • s 包含英文大小写字母、数字和空格 ' '
  • s 中 至少存在一个 单词

进阶:

  • 请尝试使用 O(1) 额外空间复杂度的原地解法。

双指针

class Solution:
# 1.去除多余的空格def trim_space(self, s: str) -> str:n=len(s)left=0right=n-1while left<=right and s[left]==' ':left+=1while left<=right and s[right]==' ':right-=1tmp=[]while left<=right:if s[left]!=' ':tmp.append(s[left])elif tmp[-1]!=' ':tmp.append(s[left])left+=1return tmp
# 2.翻转字符串def reverse_string(self,nums,left,right):while left<right:nums[left],nums[right]=nums[right],nums[left]left+=1right-=1return None
# 3.翻转每个单词def reverse_each_word(self,nums):start=0end=0n=len(nums)while start<n:while end<n and nums[end]!=' ':end+=1self.reverse_string(nums,start,end-1)start=end+1end+=1return None
# 4.翻转字符串里的单词def reverseWords(self,s):l=self.trim_space(s)self.reverse_string(l,0,len(l)-1)self.reverse_each_word(l)return ''.join(l)

[leetcode]151.翻转字符串里的单词相关推荐

  1. leetcode 151. 翻转字符串里的单词

    难度:中等 频次:69 题目: 给你一个字符串 s ,逐个翻转字符串中的所有 单词 . 单词 是由非空格字符组成的字符串.s 中使用至少一个空格将字符串中的 单词 分隔开. 请你返回一个翻转 s 中单 ...

  2. LeetCode 151. 翻转字符串里的单词(栈)

    文章目录 1. 题目信息 2. 解题 1. 题目信息 给定一个字符串,逐个翻转字符串中的每个单词. 示例 1:输入: "the sky is blue" 输出: "blu ...

  3. leetcode 151. 翻转字符串里的单词 c代码 三种方案

    如题: 给定一个字符串,逐个翻转字符串中的每个单词.示例 1: 输入: "the sky is blue" 输出: "blue is sky the"示例 2: ...

  4. 72.编辑距离105.前序中序遍历序列构造二叉树151.翻转字符串里的单词104.二叉树的最大深度76.最小覆盖子串110.平衡二叉树31.下一个排列

    72.编辑距离 给你两个单词 word1 和 word2, 请返回将 word1 转换成 word2 所使用的最少操作数 .你可以对一个单词进行如下三种操作:插入一个字符,删除一个字符,替换一个字符. ...

  5. 代码随想录算法训练营第八天|● 344.反转字符串● 541. 反转字符串II● 剑指Offer 05.替换空格● 151.翻转字符串里的单词● 剑指Offer58-II.左旋转字符

    一.344.反转字符串 力扣 思路:很简单的一个for循环双指针,left和right交换. class Solution {public void reverseString(char[] s) { ...

  6. 代码随想录算法训练营第八天|344.反转字符串 541. 反转字符串II 剑指Offer 05.替换空格 151.翻转字符串里的单词 剑指Offer58-II.左旋转字符串

    一.344.反转字符串 题目:编写一个函数,其作用是将输入的字符串反转过来.输入字符串以字符数组 char[] 的形式给出. 不要给另外的数组分配额外的空间,你必须原地修改输入数组.使用 O(1) 的 ...

  7. 代码随想录算法训练营第08天 | LeetCode 344.反转字符串,541. 反转字符串2,剑指Offer 05.替换空格,151.翻转字符串里的单词,剑指Offer58-II.左旋转字符串

    LeetCode [344. 反转字符串] 题目:编写一个函数,其作用是将输入的字符串反转过来.输入字符串以字符数组 s 的形式给出. 不要给另外的数组分配额外的空间,你必须**原地修改输入数组**. ...

  8. LeetCode 186. 翻转字符串里的单词 II

    文章目录 1. 题目 2. 解题 1. 题目 给定一个字符串,逐个翻转字符串中的每个单词. 示例: 输入: ["t","h","e",&qu ...

  9. 力扣151. 翻转字符串里的单词

    给你一个字符串 s ,逐个翻转字符串中的所有 单词 . 单词 是由非空格字符组成的字符串.s 中使用至少一个空格将字符串中的 单词 分隔开. 请你返回一个翻转 s 中单词顺序并用单个空格相连的字符串. ...

最新文章

  1. 描述Linux的虚拟化实现,Linux中实现虚拟化的四种常用方法
  2. linux slocate(secure locate) 命令详解
  3. FolderBrowserDialog(文件夹浏览对话框)
  4. 类的构造函数(分类和调用)
  5. java面试题十九 判断题
  6. IntellIJ IDEA 配置 Vue 支持
  7. Java 设计模式之 Observer 模式
  8. 如何才能在jsp文件中使用el表达式
  9. ffmpeg 合并 flv 文件
  10. idea好用插件及常用开发小工具、文本编辑器(替代notepad++)合集
  11. 查看游戏服务器ip地址网站,查看游戏服务器IP地址
  12. python画三色柱状图_python画手绘图
  13. 芯片的原理应用与分类
  14. java在线校验银行卡号_校验银行卡卡号
  15. 记录用retinaNet执行DDSM代码中的问题(求精度的过程中出现的错误)
  16. 最新CTR预测服务的GPU优化实践
  17. 引力模型-高维固定效应面板泊松模型
  18. 笔试记录 58同城 算法 20200921
  19. compareAndSwapObject
  20. 华为云classroom Java练习

热门文章

  1. Redis之数据结构底层实现
  2. C语言实现封装、继承、多态
  3. Python的继承多态
  4. 来自未来团队伙伴的一封信
  5. Go基础编程:命名、变量、常量
  6. 计算机网络常见问题总结
  7. 平均交付时长减少五天!腾讯TAPD助力企业高效交付!
  8. ​手把手教你如何进行 Golang 单元测试
  9. 程序员下班后收到工作信息怎么办?
  10. 腾讯游戏自研学术成果:基于图分割的网络表征学习初始化技术