151. reverse words in a string 解法

151. Reverse Words in a String

Difficulty: Medium

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

Example 1:

1
2
Input: "the sky is blue"
Output: "blue is sky the"

Example 2:

1
2
3
Input: "  hello world!  "
Output: "world! hello"
Explanation: Your reversed string should not contain leading or trailing spaces.

Example 3:

1
2
3
Input: "a good   example"
Output: "example good a"
Explanation: You need to reduce multiple spaces between two words to a single space in the reversed string.

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) extra space.

解法

法一

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
void (char *s, char* p){
int L = p - s;
for(int i = 0; i < L/2; i++){
s[i] ^= s[L - i - 1];
s[L - i - 1] ^= s[i];
s[i] ^= s[L - i - 1];
}
}


char * reverseWords(char * s){
int L = strlen(s);
int i = 0;
int j = 0;
int k;
char *p;

reverse(s, s+L);

while(s[i] != '