Leetcode Study Day 11

Reverse Words in a String

Given an input string s, reverse the order of the words.

A word is defined as a sequence of non-space characters. The words in s will be separated by at least one space.

Return a string of the words in reverse order concatenated by a single space.

Note that s may contain leading or trailing spaces or multiple spaces between two words. The returned string should only have a single space separating the words. Do not include any extra spaces.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Example 1:

Input: s = "the sky is blue"
Output: "blue is sky the"
Example 2:

Input: s = " hello world "
Output: "world hello"
Explanation: Your reversed string should not contain leading or trailing spaces.
Example 3:

Input: s = "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.


Constraints:

1 <= s.length <= 104
s contains English letters (upper-case and lower-case), digits, and spaces ' '.
There is at least one word in s.

My solution

My solution is very intuitive, firstly, I iterate the whole string, and store all the word into an array. Then we iterate the array from back to front, and combine the words with a 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
class Solution {
public:
string reverseWords(string s) {
string output = "";
string word ="";

vector <string> words;
int n = s.size();
for (int i = 0; i < n; i++){
if (s[i] == ' ' && word.size() != 0){
words.push_back(word);
word = "";
continue;
}
if (s[i] == ' ' && word.size() == 0)
continue;
word += s[i];
}
if (word != "")
words.push_back(word);
int words_size = words.size();
for (int i = words_size-1; i >= 0; i--){

output += words[i];
if (i != 0) output += ' ';
}
return output;
}
};
  • Copyrights © 2020-2024 Yangyang Cui

请我喝杯咖啡吧~

支付宝
微信