https://oj.leetcode.com/problems/reverse-words-in-a-string/
分三步,1. reverse line; 2. reverse words; 3. erase extra spaces;
class Solution { public: void reverseWords(string &s) { int N = s.size(); // reverse line reverse(s, 0, N - 1); int i = 0; int j = 0; // reverse words while (true) { for (; i < N && s[i] == ' '; i++); if (i == N) break; // S[i] != ' ' for (j = i + 1; j < N && s[j] != ' '; j++); // S[j] == ' ' || end() reverse(s, i, j - 1); i = j; } // remove extra spaces i = 0; j = 0; while (true) { for (; j < N && s[j] == ' '; j++); if (j == N) break; if (i != 0) { s[i++] = ' '; } while (j < N && s[j] != ' ') { s[i++] = s[j++]; } } if (i != N) s.erase(s.begin() + i, s.end()); } void reverse(string &s, int l, int r) { while (l < r) { swap(s[l++], s[r--]); } } void swap(char &a, char &b) { int tmp = a; a = b; b = tmp; } };