[Leetcode] Reverse Words in a String

8307 ワード

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.  

  •  
    あまり言うことはありませんが、スペースに行くのは面倒そうで、一度遍歴すればできます.最後のスペースは特殊に処理することに注意してください.
     
     1 class Solution {
    
     2 public:
    
     3     void reverse(string &s, int low, int high) {
    
     4         char tmp;
    
     5         while(low < high) {
    
     6             tmp = s[low];
    
     7             s[low] = s[high];
    
     8             s[high] = tmp;
    
     9             low++;
    
    10             high--;
    
    11         }
    
    12     }
    
    13     
    
    14     void removeBlank(string &s) {
    
    15         if (s.length() == 0) {
    
    16             return;
    
    17         }
    
    18         int count = 0;
    
    19         bool flag = false;
    
    20         for (int i = 0; i <= s.length(); ++i) {
    
    21             if (s[i] == ' ' && !flag) {
    
    22                 count++;
    
    23             } else if (s[i] == ' ' && flag) {
    
    24                 flag = false;
    
    25                 s[i-count] = s[i];
    
    26             } else if (s[i] != ' ') {
    
    27                 flag = true;
    
    28                 s[i-count] = s[i];
    
    29             }
    
    30         }
    
    31         int len = s.length() - count;
    
    32         if (s[len-1] == ' ') {
    
    33             s[len-1] = '\0';
    
    34             len--;
    
    35         }
    
    36         s.resize(len);
    
    37     }
    
    38 
    
    39     void reverseWords(string &s) {
    
    40         removeBlank(s);
    
    41         reverse(s,0,s.length()-1);
    
    42         int a = 0, b;
    
    43         for (int i=0; i<=s.length();++i){
    
    44             if(s[i]==' '||s[i]=='\0'){
    
    45                 b = i-1;
    
    46                 reverse(s,a,b);
    
    47                 a = i+1;
    
    48             }
    
    49         }
    
    50         return;
    
    51     }
    
    52 };