【38】186. Reverse Words in a String II

186. Reverse Words in a String II

Description Submission Solutions Add to List

  • Total Accepted: 21466
  • Total Submissions: 76192
  • Difficulty: Medium
  • Contributors: Admin

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

The input string does not contain leading or trailing spaces and the words are always separated by a single space.

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

Could you do it in-place without allocating extra space?

Related problem: Rotate Array

Solution: 

 1 class Solution {
 2 public:
 3 //此题解法:先把每个单词翻转一下,再翻转整个字符串(为了整个单词的大顺序是反过来的)。或者先翻转整个字符串,再翻转每个单词。
 4     void reverseWords(string &s) {
 5        reverse(s.begin(), s.end());
 6         int n = s.length(), l = 0, r = 0;
 7         while (r < n) {
 8             while (r < n && !isspace(s[r])) r++;//用isspace判断 可以避免下例的情况hi!
 9             reverse(s.begin() + l, s.begin() + r); 
10             l = ++r;
11         }
12     }
13 };

 

以下方法过不了 test case: hi! 输出是!ih 而不是hi!   ?????????????

 1 class Solution {
 2 public:
 3 //此题解法:先把每个单词翻转一下,再翻转整个字符串(为了整个单词的大顺序是反过来的)。或者先翻转整个字符串,再翻转每个单词。
 4     void reverseWords(string &s) {
 5         int left = 0;
 6         for(int i = 0; i <= s.size(); i++){
 7             if(s[i] == ' ' || i == s.size()){//遇到每个空格或者到最后的时候(因为没空格)要翻转
 8                 //reverse(s, left, i - 1);//从左边界翻转到空格左边,此为一整个单词
 9                 reverse(s.begin() + left, s.begin() + i - 1);
10                 left = i + 1;//更新左边界,到空格右边第一个
11             }
12             
13         }
14         //reverse(s, 0, s.size() - 1);
15         reverse(s.begin(), s.end());
16     }
17     /*
18     void reverse(string& s, int left, int right){
19         while(left < right){
20             char tmp = s[left];
21             s[left] = s[right];
22             s[right] = tmp;
23             left ++; 
24             right --;
25         }
26     }*/
27 };

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2017-02-09 08:36  会咬人的兔子  阅读(117)  评论(0编辑  收藏  举报