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

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

Update (2015-02-12): For C programmers: Try to solve it in-place in O(1) space.

这题遇到的困难主要是细节地方处理的不好:(1)空格的处理,(2)标点符号reverse?

主要思路:(1)万事开头难,你必须首先就把一些空串,单个字符串等一些在后面会出现bug的输入处理掉!!!

(2)把第一步处理好之后,将整个字符串翻转过来,标点当成字符处理。

(3)每个单词翻转,并用一个string存储。然后补充一个空格,直到处理完整个串。

(4)判断字符串是否为空(如果前面输入多个空格,到这里得到一个空字符串),非空则删除最后一个空格。

(5)输出结果。

在单词翻转的时候,使用布尔型wordHead记录是否是单词头而不是空格,确保只针对单词翻转。

class Solution {
public:
void reverseWords(string &s)
{
int n = s.size() - ;
int wHead = ;
int wTail = n ;
char cPunct = ' ';
if(s.size() == )
{
return;
}
if( n == )
{
if(s[] == ' ')
{
s.clear();
}
return;
} while( wHead < wTail )
{
char temp = s[wTail];
s[wTail] = s[wHead];
s[wHead] = temp;
wHead++;
wTail--;
} wTail = wHead = ;
string sRet;
bool wordHead = true;
while(wTail <= n)
{
if(!isspace(s[wTail]) && wordHead)
{
wHead = wTail;
wordHead = false;
}
if( ( s[wTail] == ' ' || wTail == n) && !isspace(s[wHead]))
{
if(wTail == n && !isspace(s[wTail]))
wTail++;
sRet += SwapWord(s, wHead, wTail - ) + " ";
wHead = wTail + ;
wordHead = true;
}
wTail++;
}
s = sRet;
if(s.size() > )
s.erase(s.size()-, ); }
string SwapWord(string &s, int wHead, int wTail)
{
int wStart = wHead;
int wEnd = wTail; while( wStart < wEnd )
{
char temp = s[wStart];
s[wStart] = s[wEnd];
s[wEnd] = temp;
wStart++;
wEnd--;
}
return s.substr(wHead, wTail - wHead + );
} };

应该认真的对待OJ上自己力所能及的每一题,多思考!

LeetCode 151 reverse word 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. Java for 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 ...

  3. leetcode 151. Reverse Words in a String --------- java

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

  4. [leetcode]151. Reverse Words in a String翻转给定字符串中的单词

    Given an input string, reverse the string word by word. Example: Input: "the sky is blue", ...

  5. Leetcode#151 Reverse Words in a String

    原题地址 将单词按空格分词,然后倒序拼接即可 代码: void reverseWords(string &s) { vector<string> words; ; ; ; i &l ...

  6. [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 ...

  7. [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 ...

  8. 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 ...

  9. 【LeetCode】151. Reverse Words in a String

    Difficulty: Medium  More:[目录]LeetCode Java实现 Description Given an input string, reverse the string w ...

随机推荐

  1. jmeter实例,如果有说明错误,请各位大神批评

    首先我们打开jmeter,今天录制的脚本的是获取QQ头像,找了好久才找到可以免费试用的接口,如果有什么错误的地方,欢迎大家提出来,我会及时修改,也给自己一次进步的机会,希望大家不吝赐教!!!如果有什么 ...

  2. C++ 学习笔记之——输入和输出

    在 C++ 中,我们通过调用输入输出流库中的流对象 cin 和 cout 来实现输入和输出. #include <iostream> using namespace std; int ma ...

  3. c# 自动关机代码

    #region 关机代码 //C#关机代码 // 这个结构体将会传递给API.使用StructLayout //(...特性,确保其中的成员是按顺序排列的,C#编译器不会对其进行调整. [Struct ...

  4. 【iOS开发】iOS CGRectGetMaxX/Y 使用

    在iOS的界面布局中我们可以使用CGRectGetMaxX 这个方法来方便的获取当前控件的x坐标值+宽度的数值,这样便可以方便布局. 同理CGRectGetMaxY是获取y坐标值+控件高度的值,当然这 ...

  5. HDU 1338 Game Prediction

    http://acm.hdu.edu.cn/showproblem.php?pid=1338 Problem Description Suppose there are M people, inclu ...

  6. Java中IO——NIO

    一.引入 当引入一些新功能的时候,那说明之前的设计可能还需要完善. 1.阻塞式 在传统的IO输入输出中,如果我们从流中去读数据,而数据源中没有数据时,程序就会阻塞该线程.阻塞式线程的一种基本状态,可以 ...

  7. Log4Net讲解

    声明:本文内容主要译自Nauman Leghari的Using log4net,亦加入了个人的一点心得(节3.1.4). 1           简介 1.1          Log4net的优点: ...

  8. Mac OSX 10.11安装Jekyll

    一说常见的博客管理工具大家想到的就是WordPress.不过现在部分个人博客用户开始从WordPress转移到Jekyll上了.Jekyll是一种本地生成静态页面进而线上发布的博客工具,而且现在已经有 ...

  9. [C/C++] 深拷贝和浅拷贝

    ·默认拷贝构造函数可以完成对象的数据成员值简单地复制-----浅拷贝 ·对象的数据资源是由指针指示的堆时,默认拷贝构造函数仅作指针值的复制,需要显式定义拷贝构造函数-----深拷贝 首先定义几个点: ...

  10. ES 1.7安装ik分词elasticsearch-analysis-ik-1.2.5

    IK简介 https://www.cnblogs.com/yjf512/p/4789239.html https://www.cnblogs.com/xing901022/p/5910139.html ...