码迷,mamicode.com
首页 > 其他好文 > 详细

Reverse Words in a String leetcode

时间:2016-01-23 01:13:42      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:

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

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


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

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.

 

这个题如果用C++的stringstream字符串流来实现的话,会非常简单
void reverseWords(string &s) {
    istringstream is(s);
    string tmp;
    is >> s;
    while(is >> tmp) s = tmp + " " + s;
    if(s[0] ==  ) s = "";
}

但是,题目中对于C语言实现有更严格的要求,需要就地操作

联想到之前碰到的题目,数组旋转问题,我们是否可以用类似的思路来解决呢

对于每一个单词,都将其字母前后逆置,然后再将整个字符串逆置,这样就可以得到正确反转结果了。

但是如何处理多余的空格呢?我们可以在遍历的同时,利用快慢双指针来将空格省略掉。然后再执行逆置操作。

代码如下:

void reverseWords(string &s) {

    int i = 0, j = 0;
    int l = 0;
    int len = s.length();
    int wordcount = 0;

    while (true) {
        while (i<len && s[i] ==  ) i++;
        if (i == len) break;
        if (wordcount) s[j++] =  ;
        l = j;
        while (i<len && s[i] !=  ) { s[j] = s[i]; j++; i++; }
        reverseword(s, l, j - 1);
        wordcount++;
    }
s.resize(j);
reverseword(s, 0, j - 1); }

 

 

 

Reverse Words in a String leetcode

标签:

原文地址:http://www.cnblogs.com/sdlwlxf/p/5152364.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!