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

151. Reverse Words in a String

时间:2018-06-15 16:04:59      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:single   blog   http   enc   ace   lin   for   空间   put   

问题描述:

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

Example:  

Input: "the sky is blue",
Output: "blue is sky the".

Note:

  • A word is defined as a sequence of non-space characters.
  • Input string may contain leading or trailing spaces. However, your reversed string should not contain leading or trailing spaces.
  • You need to reduce multiple spaces between two words to a single space in the reversed string.

Follow up: For C programmers, try to solve it in-place in O(1) space.

 

解题思路:

我想的办法使用getline读入字符串并以‘ ’作为分隔符,需要检查当前获取字符串是否为空。

空间复杂度不为O(1),所以我就折叠一下:)

来看看空间复杂度为1的解法(来自于Grandyang):

使用reverse()翻转字符串,然后再单独翻转单词。

使用了辅助变量StoreIndex来记录新的字符串中单词的开始

初始值为0。

找到第一个不为空的字符后,将其拷贝到storeIndex的位置,然后用reverse再翻转单词。

为了防止出现“    ”开始的情况,用了resize。

 

代码:

技术分享图片
class Solution {
public:
    void reverseWords(string &s) {
        vector<string> v;
        stringstream ss(s);
        string temp;
        while(getline(ss, temp,  )){
            if(temp.size() != 0)
                v.push_back(temp);
        }
        s.clear();
        for(int i = v.size() - 1; i > -1; i--){
            s += v[i] + " ";
        }
        s = s.substr(0, s.size() - 1);
    }
};
空间复杂度不为O(1)

 

空间复杂度为O(1) :

class Solution {
public:
    void reverseWords(string &s) {
        int storeIdx = 0, n = s.size();
        reverse(s.begin(), s.end());
        for(int i = 0; i < n; i++ ){
            if(s[i] !=  ){
                if(storeIdx != 0)
                    s[storeIdx++] =  ;
                int j = i;
                while(j < n && s[j] !=  )
                    s[storeIdx++] = s[j++];
                reverse(s.begin()+storeIdx - (j-i), s.begin() + storeIdx);
                i = j;
            }
        }
        s.resize(storeIdx);
    }
};

 

151. Reverse Words in a String

标签:single   blog   http   enc   ace   lin   for   空间   put   

原文地址:https://www.cnblogs.com/yaoyudadudu/p/9187000.html

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