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

click to show clarification.

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.
分析:细节实现题,基本思路为:将各单词从s中提取出来,存放在一个vector<string>中,然后清空s并逆序遍历vector<string>将单词和空格append到s中。代码如下:
 1 class Solution {
 2 public:
 3     void reverseWords(string &s) {
 4         int n = s.length();
 5         if(n == 0) return;
 6         vector<string> res;
 7         for(int i = 0; i < n;){
 8             while(i < n && s[i] == ' ')i++;//skip spaces
 9             int j = i;
10             while(j < n && s[j] != ' ')j++;
11             if(i < n) res.push_back(s.substr(i,j-i));
12             i = j;
13         }
14         s.clear();
15         for(auto i = res.rbegin(); i != res.rend(); i++){
16             s += *i + " ";
17         }
18         if(s.length() != 0) s.pop_back();
19     }
20 };

 

 

posted on 2014-10-25 21:05  Ryan-Xing  阅读(112)  评论(0编辑  收藏  举报