Leetcod每日一题:151.reverse-words-in-a-string(翻转字符串里的单词)
思路是:双指针去头尾空格,然后遍历中间去空格直到每个单词后最多一个空格;然后将整个字符串翻转,然后从头遍历将遇到的单词翻转回去;
一开始因为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(翻转字符串里的单词)相关推荐
- 数组翻转_LeetCode刷题实战151:翻转字符串里的单词
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !今天和大家聊 ...
- 72.编辑距离105.前序中序遍历序列构造二叉树151.翻转字符串里的单词104.二叉树的最大深度76.最小覆盖子串110.平衡二叉树31.下一个排列
72.编辑距离 给你两个单词 word1 和 word2, 请返回将 word1 转换成 word2 所使用的最少操作数 .你可以对一个单词进行如下三种操作:插入一个字符,删除一个字符,替换一个字符. ...
- 代码随想录算法训练营第八天|● 344.反转字符串● 541. 反转字符串II● 剑指Offer 05.替换空格● 151.翻转字符串里的单词● 剑指Offer58-II.左旋转字符
一.344.反转字符串 力扣 思路:很简单的一个for循环双指针,left和right交换. class Solution {public void reverseString(char[] s) { ...
- 代码随想录算法训练营第八天|344.反转字符串 541. 反转字符串II 剑指Offer 05.替换空格 151.翻转字符串里的单词 剑指Offer58-II.左旋转字符串
一.344.反转字符串 题目:编写一个函数,其作用是将输入的字符串反转过来.输入字符串以字符数组 char[] 的形式给出. 不要给另外的数组分配额外的空间,你必须原地修改输入数组.使用 O(1) 的 ...
- 代码随想录算法训练营第08天 | LeetCode 344.反转字符串,541. 反转字符串2,剑指Offer 05.替换空格,151.翻转字符串里的单词,剑指Offer58-II.左旋转字符串
LeetCode [344. 反转字符串] 题目:编写一个函数,其作用是将输入的字符串反转过来.输入字符串以字符数组 s 的形式给出. 不要给另外的数组分配额外的空间,你必须**原地修改输入数组**. ...
- leetcode 151. 翻转字符串里的单词 c代码 三种方案
如题: 给定一个字符串,逐个翻转字符串中的每个单词.示例 1: 输入: "the sky is blue" 输出: "blue is sky the"示例 2: ...
- 力扣151. 翻转字符串里的单词
给你一个字符串 s ,逐个翻转字符串中的所有 单词 . 单词 是由非空格字符组成的字符串.s 中使用至少一个空格将字符串中的 单词 分隔开. 请你返回一个翻转 s 中单词顺序并用单个空格相连的字符串. ...
- LeetCode 151. 翻转字符串里的单词(栈)
文章目录 1. 题目信息 2. 解题 1. 题目信息 给定一个字符串,逐个翻转字符串中的每个单词. 示例 1:输入: "the sky is blue" 输出: "blu ...
- 151. 翻转字符串里的单词
消除字符串中的多余空格 class Solution {public static String reverseWords(String s) {if (s == null) return " ...
最新文章
- 使用AvalonDock制作WPF多标签浏览器(一)
- asp源码-魔方微店商城系统 v1版本源码
- .NET的Math.Round与数学无关。没关系!
- 正文内容 SQL Server 数据库清除日志
- php 1970毫秒数,php – date()返回1970-01-01
- 2级c语言题库及答案,计算机二级C语言上机题库含答案解析
- android和电脑共享文件,安卓手机怎么访问电脑共享文件
- 哥伦比亚大学 Schulzrinne 教授:撰写科研论文详细教程
- Android中补间动画相关知识
- spa项目开发之tab页实现
- thx是什么意思_在高数中thx表示什么意思-thx-数学-别杂南同学
- 抖音商家找达人带货怎么给链接?抖音带货操作方法分享
- 解决克隆虚拟机后无法上网问题(亲测有效)
- 【cython安装教程】
- OneNav一为主题魔改教程(一):优化后台新增网站时调用API却没有赋好值的BUG,以减少复制编辑工作量--一梦
- mybatis遍历foreach中or拼接
- Agora声网-Uniapp拉流(Vue拉流)
- APS入门4: 供应链与APS
- 原生php往word文件对应位置写入值 , 并实现预览和下载功能(超实用)
- 教你一招不花钱去参加A级大会(高校俱乐部活动)
热门文章
- C++反汇编第一讲,认识构造函数,析构函数,以及成员函数
- 5个节点hadoop安装(zookeeper)
- 软件工程-构建之法 团队
- [转]30个自我提升技巧
- C#使用Monitor类、Lock和Mutex类进行多线程同步
- VB Vista窗体控件下载(coolBoySkin1.3版)
- set, unordered_set模板类
- 中国剩余定理-模版(互质版)
- Excel VBA 操作 复制拷贝操作
- Ubuntu 14.04 设置静态IP