Reverse Words in a String

Given an input string, reverse the string word by word.

For example,
Given s = "the sky is blue",
return "blue is sky the".

Clarification:

  • What constitutes a word?
    A sequence of non-space characters constitutes a word.
  • Could the input string contain leading or trailing spaces?
    Yes. However, your reversed string should not contain leading or trailing spaces.
  • How about multiple spaces between two words?
    Reduce them to a single space in the reversed string.

反转string里面的单词顺序。

注意在Clarification里头:

一个单词中不包含空格,字符串开始和结尾可以有若干个空格符号,单词与单词之间的空格可以有一个或多个空格符号,我们需要把他变成一个空格。

解题思路:

我是这样想的,把s中的每一个单词都分割出来存储到一个vector里面去,再让这个vector从后往前遍历,result字符串就是题目中要求的格式了,然后赋值给s就行了。

首先,如何去掉字符串s首尾的空格呢?

通过string的find_first_not_of()和find_last_not_of()方法,分别用begin和end指向第一个单词的开始和最后一个单词的结尾处,接下来,只需要在begin和end范围里进行for循环就行了。

那~怎么判断我当前的 i 是在单词里面还是在单词外面呢?

设置一个bool 变量 betweenWord,当betweenWord为true表示在单词内部,betweenWord为false时在单词外面。

当从单词内部到下一个空格字符时,通过substr获得第一个单词,然后设置betweenWord为false,当下一个字符不是空格时候,说明进入了单词内部了,用cur指向该单词的第一个位置,然后继续遍历直到下一个空格处,说明不在单词内部了,我们获得另一个sub单词,存进vector。

最后,用result字符串保存符合格式的字符串,再赋值给s。

代码如下:

class Solution {
public:
void reverseWords(string &s) {
size_t begin = s.find_first_not_of(" ");
if(begin == string::npos){
//s中全都是空格符号
s = "";
return ;
}
size_t end = s.find_last_not_of(" ");
bool betweenWord = true;
string sub,result;
size_t cur = begin;
vector<string> vec; for(int i = begin; i <= end; i++){
if(betweenWord){
if(s[i] == ' ' || i == end){
//进入到单词外部
if(i == end){
sub = s.substr(cur,i-cur+);
vec.push_back(sub);
}
else{
sub = s.substr(cur,i-cur);
vec.push_back(sub);
}
betweenWord = false;
}
}
else{
if(s[i] != ' '){
//进入单词内部
if(i == end){
//最后一个单词只有一个字符的情况
sub = s.substr(i,);
vec.push_back(sub);
}
cur = i;
betweenWord = true;
}
}
} for(int i = vec.size()-; i > ; i--){
result += vec[i] + " ";
}
result += vec[]; s = result;
}
};

哎,我写了那么多,别人用十几行就搞定了,这就是差距啊……

Orz……

    void reverseWords(string &s)
{
string rs;
for (int i = s.length()-; i >= ; )
{
while (i >= && s[i] == ' ') i--;
if (i < ) break;
if (!rs.empty()) rs.push_back(' ');
string t;
while (i >= && s[i] != ' ') t.push_back(s[i--]);
reverse(t.begin(), t.end());
rs.append(t);
}
s = rs;
}

【LeetCode练习题】Reverse Words in a String的更多相关文章

  1. [LeetCode] 151. Reverse Words in a String 翻转字符串中的单词

    Given an input string, reverse the string word by word. For example,Given s = "the sky is blue& ...

  2. [LeetCode] 186. Reverse Words in a String II 翻转字符串中的单词 II

    Given an input string, reverse the string word by word. A word is defined as a sequence of non-space ...

  3. [LeetCode] 557. Reverse Words in a String III 翻转字符串中的单词 III

    Given a string, you need to reverse the order of characters in each word within a sentence while sti ...

  4. Leetcode#557. Reverse Words in a String III(反转字符串中的单词 III)

    题目描述 给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序. 示例 1: 输入: "Let's take LeetCode contest" 输 ...

  5. 【LeetCode】Reverse Words in a String 反转字符串中的单词

    一年没有管理博客园了,说来实在惭愧.. 最近开始刷LeetCode,之前没刷过,说来也实在惭愧... 刚开始按 AC Rates 从简单到难刷,觉得略无聊,就决定按 Add Date 刷,以后也可能看 ...

  6. leetcode 557. Reverse Words in a String III 、151. Reverse Words in a String

    557. Reverse Words in a String III 最简单的把空白之间的词反转 class Solution { public: string reverseWords(string ...

  7. leetcode - [1]Reverse Words in a String

    Question: Reverse Words in a String Given an input string, reverse the string word by word. For exam ...

  8. LeetCode 345. Reverse Vowels of a String

    Write a function that takes a string as input and reverse only the vowels(元音字母) of a string. Example ...

  9. 【leetcode】Reverse Words in a String

    今天第一次在leetcode上提交了一个题目,据说这个网站基本上都是名企面试笔试题,今天无意一进去就看到第一题居然就是昨天的腾讯实习生笔试题,赶紧注册了个账号做题. 题目描述: Given an in ...

  10. Python [Leetcode 345]Reverse Vowels of a String

    题目描述: Write a function that takes a string as input and reverse only the vowels of a string. Example ...

随机推荐

  1. <转载>构造函数与拷贝构造函数

    原文地址http://www.cnblogs.com/waynelu/archive/2012/07/01/2572264.html 构造函数 构造函数.析构函数与赋值函数是每个类最基本的函数. 对于 ...

  2. 【转】Alsa音频编程【精华】

    一.前序 这里了解一下各个参数的含义以及一些基本概念. 声音是连续模拟量,计算机将它离散化之后用数字表示,就有了以下几个名词术语. 样本长度(sample):样本是记录音频数据最基本的单位,计算机对每 ...

  3. [think in java]知识点学习

    java中 全部数值都有正负号,不存在无符号整数. java中的基本类型存储在堆栈中. 其它对象存储在堆中. java确保数组会被初始化,并且不能在它的范围之外被訪问. 下面代码在c和c++中是合法的 ...

  4. Analyzing the Analyzers 分析分析师 —— 数据科学部门如何建

    很多牛逼的公司都宣称在建立数据科学部门,这个部门该如何组建,大家都在摸石头过河. O‘reilly Strata今年 六月份发布了报告 <Analyzing the Analyzers>, ...

  5. 从 mysql 客户端导出数据库 mysqldump

    window+r 打开cmd 输入 mysqldump -u mysql用户名 -p 数据库名 >  要导出的位置  (注意,最后没有分号) 然后输入密码即可 ^_^

  6. 7. 稀疏表示之OMP,SOMP算法及openCV实现

    一.前言 稀疏表示是自上世纪90年代开始,从人眼的视觉感受野获得启示,逐渐被人们所研究.现在已经发展为一种重要的信息表示方法.所谓稀疏表示是指,一个信号在过完备字典中,可以由少数个原子线性表达, 其数 ...

  7. [HeadFirst-JSPServlet学习笔记][第三章:实战MVC]

    第三章 实战MVC J2EE如何集成一切 Java2企业版(Java 2 Enterprise Editon,J2EE)是一种超级规范.规定了servlets2.4,JSP2.0,EJB2.1(Ent ...

  8. nopCommerce架构分析系列(二)数据Cache

    原文(http://www.cnblogs.com/gusixing/archive/2012/04/12/2443799.html)非常感谢作者顾思行的分享! 序言 在很多访问量较大的系统中,尤其在 ...

  9. CSS基础笔记

    之前没有开通好博客,笔记都记录在有道云,今天全部转过来!!! 1.当同一个html元素不止一个样式定义时,内联样式(在html元素内部)拥有最高的优先权:其他如内部样式表(位于<head> ...

  10. 怎么修改placeholder字体的css样式

    修改palceholder内文字的css样式 ::-webkit-input-placeholder{ color: red; font-size: 20px; line-height: 50px; ...