思路是:双指针去头尾空格,然后遍历中间去空格直到每个单词后最多一个空格;然后将整个字符串翻转,然后从头遍历将遇到的单词翻转回去;

一开始因为while (s[end] == ' ' && end >= 0) //除去结尾空格end>=0不严谨,导致案例" "死活不通过,我以为结果有问题,试了几次才发现end在这个案例中会减到-1,使得s[-1]这种溢出情况出现;

错误原因:Line 1060: Char 9: runtime error: addition of unsigned offset to 0x7ffc46f434a0 overflowed to 0x7ffc46f4349f (basic_string.h)

使用api应该会快些,尤其时java的,这里我就懒得换了;

#include <iostream>
#include <string>
using namespace std;void reverse(string &s, int begin, int end) //将s[begin] 至 s[end] 字符串部分反转
{string re = s.substr(begin, end - begin + 1);int k = end - begin;for (int i = begin; i <= end; i++) //反转后置回原字符串{s[i] = re[k--];}
}string reverseWords(string s)
{string s_end="";if(s.length()==0)  return s_end;int begin = 0, end = s.length() - 1; //begin end 用于确定边界while (s[begin] == ' ' && begin < s.length()) //除去开头空格{begin++;}while (s[end] == ' ' && end > 0) //除去结尾空格{end--;}if(begin>=end) return s_end;for (int i = begin; i <= end;) //去单词后多余的空格{s_end.push_back(s[i++]);if (s[i] == ' ' && i <= end){s_end.push_back(' ');while (s[i] == ' ')i++;}}reverse(s_end, 0, s_end.length() - 1); //将它全部反转//然后遇到一个空格就将前面的单词再反转过来int nums = 0;int len = s_end.length();for (int i = 0; i <= len; i++){if (s_end[i] == ' ' || i == len ){reverse(s_end, i - nums, i - 1);nums = 0;}else{nums++;}}return s_end;
}int main()
{cout << reverseWords("    hello    world!    ") << endl;cout << reverseWords("the sky is blue") << endl;cout << reverseWords("a good   example") << endl;cout << reverseWords(" ") << endl;return 0;
}

Leetcod每日一题:151.reverse-words-in-a-string(翻转字符串里的单词)相关推荐

  1. 数组翻转_LeetCode刷题实战151:翻转字符串里的单词

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !今天和大家聊 ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    消除字符串中的多余空格 class Solution {public static String reverseWords(String s) {if (s == null) return " ...

最新文章

  1. 使用AvalonDock制作WPF多标签浏览器(一)
  2. asp源码-魔方微店商城系统 v1版本源码
  3. .NET的Math.Round与数学无关。没关系!
  4. 正文内容 SQL Server 数据库清除日志
  5. php 1970毫秒数,php – date()返回1970-01-01
  6. 2级c语言题库及答案,计算机二级C语言上机题库含答案解析
  7. android和电脑共享文件,安卓手机怎么访问电脑共享文件
  8. 哥伦比亚大学 Schulzrinne 教授:撰写科研论文详细教程
  9. Android中补间动画相关知识
  10. spa项目开发之tab页实现
  11. thx是什么意思_在高数中thx表示什么意思-thx-数学-别杂南同学
  12. 抖音商家找达人带货怎么给链接?抖音带货操作方法分享
  13. 解决克隆虚拟机后无法上网问题(亲测有效)
  14. 【cython安装教程】
  15. OneNav一为主题魔改教程(一):优化后台新增网站时调用API却没有赋好值的BUG,以减少复制编辑工作量--一梦
  16. mybatis遍历foreach中or拼接
  17. Agora声网-Uniapp拉流(Vue拉流)
  18. APS入门4: 供应链与APS
  19. 原生php往word文件对应位置写入值 , 并实现预览和下载功能(超实用)
  20. 教你一招不花钱去参加A级大会(高校俱乐部活动)

热门文章

  1. C++反汇编第一讲,认识构造函数,析构函数,以及成员函数
  2. 5个节点hadoop安装(zookeeper)
  3. 软件工程-构建之法 团队
  4. [转]30个自我提升技巧
  5. C#使用Monitor类、Lock和Mutex类进行多线程同步
  6. VB Vista窗体控件下载(coolBoySkin1.3版)
  7. set, unordered_set模板类
  8. 中国剩余定理-模版(互质版)
  9. Excel VBA 操作 复制拷贝操作
  10. Ubuntu 14.04 设置静态IP