难度:中等
频次:69

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

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

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

说明:

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

解题思路:一次遍历(倒序+标记位置+截取)

注意

  • 遍历的时候分成两种形式,第一种是遍历跳过空格,直到非空格的位置,一种是遍历非空格,直到是空格的位置
  • 两次遍历的顺序,最好是i先遍历非空格,再遍历空格,这样子不用去考虑到开头是否有空格的特俗情况,如果是先遍历空格,再遍历非空格,那么最后i=j的情况,而且这个时候不去处理就会多出一个空格
  • String的函数需要注意
    • s.charAt();
    • s.substring(i,j);[i,j),包括i,不包括j
    • s.toString();
    • s.toCharArray();

代码

先遍历字母,再遍历非空格
class Solution {public String reverseWords(String s) {int len=s.length();int i=len-1;StringBuffer sb=new StringBuffer();while(i>=0){int j=i;//i的下标移动到第一个空格处while(i>=0&&s.charAt(i)!=' ') i--;//如果结果集里有东西,添加空格if(sb.length()>0) sb.append(" ");//裁剪[i+1,j]sb.append(s.substring(i+1,j+1));//移动i到后面不为空格处while(i>=0&&s.charAt(i)==' ') i--;}return sb.toString();}
}
先遍历空格,再遍历字母
class Solution {public String reverseWords(String s) {int len=s.length();int i=len-1;StringBuffer sb=new StringBuffer();while(i>=0){//i的下标移动到第一个非空格处while(i>=0&&s.charAt(i)==' ') i--;int j=i;//把i移动到空格处while(i>=0&&s.charAt(i)!=' ') i--;//如果结果集里有东西并且最后遍历i!=j,添加空格if(sb.length()>0&&i!=j) sb.append(" ");//裁剪[i+1,j]sb.append(s.substring(i+1,j+1));}return sb.toString();}
}

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

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

    给你一个字符串 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. 程序员转型AI,这里有最全的机器学习介绍+应用实例
  2. Context node attribute expand trouble shooting guide
  3. Win10技巧:16个系统优化设置小技巧,大幅度提升你的电脑性能!
  4. 源码大招:不服来战!撸这些完整项目,你不牛逼都难!
  5. 云计算学习路线图素材课件:DevOps和云计算之间的关系
  6. php 循环中return,php中for循环遇上return的示例代码分享
  7. DNS使用的是TCP协议还是UDP协议
  8. JAVA获取文件本身所在的磁盘位置
  9. 如何提升人脸识别的精度_宝比万像人脸识别:健身房人脸识别门禁系统如何助力健身房管理?...
  10. 【技术框架汇总】_开发平台_前端框架_手机端框架_测试工具_数据库中间件_监控工具_框架_汇总
  11. 精简版XP安装IIS
  12. jsp调用getParameterValues获取表单信息
  13. 产品研发流程的四个里程碑
  14. 在word表格中如何快速清除表格内容?
  15. matlab fisher检验,模式识别中Fisher分类器的Matlab实现及测试
  16. 欢迎加入知识星球 [ Hi Android ]
  17. ppt演示文档如何瘦身
  18. 学习401k计划,建立自己的养老金投资组合
  19. win10滑动关机代码bat_Windows10系统电脑如何使用滑动关机
  20. 烦恼天天有,不捡自然无

热门文章

  1. C++ 编程错误记录
  2. 【转】TCP协议中的三次握手和四次挥手(图解)
  3. Wpf拖动按钮实现(二)
  4. 一文看懂https如何保证数据传输的安全性的
  5. 那个写同龄人正在抛弃你的作者,道理都懂,怎么你还是loser
  6. Linux 软件安装与卸载之获取程序包的途径
  7. ASP.NET Core 中文文档 第二章 指南(4.5)使用 SQL Server LocalDB
  8. iOS AppStore 申请加急审核
  9. linux磁盘分区格式化与挂载
  10. oracle日期处理(一)