文章目录

  • 1. 题目信息
  • 2. 解题

1. 题目信息

给定一个字符串,逐个翻转字符串中的每个单词。

示例 1:输入: "the sky is blue"
输出: "blue is sky the"
示例 2:输入: "  hello world!  "
输出: "world! hello"
解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
示例 3:输入: "a good   example"
输出: "example good a"
解释: 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。

说明:

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-words-in-a-string
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

《剑指Offer》同题:面试题58 - I. 翻转单词顺序

2. 解题

  • 利用栈先进后出
  • 字符不为空,且不在最后一个位置时,加入字符串
  • 字符不为空,且在最后一个位置时,加入字符串,并入栈
  • 字符为空,如果当前字符串不为空,字符串入栈
  • 最后依次输出栈顶,中间加空格,末尾没有空格

class Solution {public:string reverseWords(string s) {while(!s.empty() && s.back()==' ')s.pop_back();while(!s.empty() && s.front()==' ')s.erase(s.begin());if(s.empty())return "";stack<string> stk;string str;for(int i = 0; i < s.size(); ++i){if(s[i] != ' ' && i != s.size()-1)str.push_back(s[i]);else if(s[i] != ' ' && i == s.size()-1){str.push_back(s[i]);stk.push(str);}else{if(str != ""){stk.push(str);str = "";}}}str = "";while(!stk.empty()){str += stk.top();str.push_back(' ');stk.pop();}str.pop_back();return str;}
};
  • 预先在s最后加一个空格,能简化代码
class Solution {public:string reverseWords(string s) {while(!s.empty() && s.back()==' ')s.pop_back();while(!s.empty() && s.front()==' ')s.erase(s.begin());if(s.empty())return "";s.push_back(' ');//处理边界方便int i, n = s.size();string ans;stack<string> stk;for(i = 0; i < n; ++i){if(s[i] != ' ')ans += s[i];else// (s[i]==' '){if(ans.size()){stk.push(ans);ans.clear();}}}while(!stk.empty()){ans += stk.top()+' ';stk.pop();}ans.pop_back();return ans;}
};

LeetCode 151. 翻转字符串里的单词(栈)相关推荐

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

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

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

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

  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. 特征重要度(feature importance)如何获取、排序、可视化、以及可视化阈值设置?
  2. vmware 报错解决:The system cannot find the path specified.
  3. FPGA详细芯片结构
  4. 丰润达全面完成安防传输生态体系布局
  5. jQuery 样式操作||操作 css 方法/设置类样式方法
  6. python集合类型_python集合类型介绍
  7. 蓝桥杯-矩阵相乘(java)
  8. python——logging模块
  9. Little Sub and Apples
  10. Jenkins 基本概念与简介
  11. css设置文本自动换行
  12. Node.js的基本使用3
  13. MVC3.0与C#截取字符串
  14. python django查询12306火车票
  15. accumulate
  16. ams1117-3.3v电源稳压芯片低压差线性稳压器
  17. 软件工程毕业设计 毕设课题选题题目汇总
  18. Win10怎么提高显卡游戏性能
  19. php怎么添加extension,php中没有extension怎么办_后端开发
  20. 计算机云班课王清答案,基于蓝墨云班课的移动学习实践

热门文章

  1. C# 对Ini文件操作(C# ini文件操作类)
  2. cocos2dx 圆盘抽奖_cocoscreator之微信小游戏的抽奖转盘
  3. 字符设备驱动基础篇2——用开发板来调试驱动模块的步骤
  4. Mysql优化之执行计划查看
  5. 04_类与对象_课程动手动脑问题以及课后实验性问题及解答集锦
  6. 关于MapReduce中自定义Combine类(一)
  7. 利用索引数组排序 不改变原数组值的位置
  8. Andorid 反编译App
  9. 什么是域名服务器(DNS)
  10. #include 中的stat.h文件到底在哪个目录下面?