-
Notifications
You must be signed in to change notification settings - Fork 20
/
0151_reverse_words_in_a_string.rs
66 lines (61 loc) · 1.68 KB
/
0151_reverse_words_in_a_string.rs
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
//! Given an input string, reverse the string word by word.
//!
//!
//!
//! Example 1:
//!
//! Input: "the sky is blue"
//! Output: "blue is sky the"
//!
//! Example 2:
//!
//! Input: " hello world! "
//! Output: "world! hello"
//! Explanation: Your reversed string should not contain leading or trailing spaces.
//!
//! Example 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.
//!
struct Solution;
impl Solution {
pub fn reverse_words(s: String) -> String {
let mut words: Vec<&str> = s.split(' ').collect();
words.iter()
.rev()
.filter(|word| {
!(**word).is_empty()
})
.map(|word| {
*word
})
.collect::<Vec<&str>>()
.join(" ")
}
}
#[cfg(test)]
mod tests {
use super::Solution;
#[test]
fn test_0() {
assert_eq!(Solution::reverse_words(String::from("the sky is blue")), String::from("blue is sky the"));
}
#[test]
fn test_1() {
assert_eq!(Solution::reverse_words(String::from(" hello world! ")), String::from("world! hello"));
}
#[test]
fn test_2() {
assert_eq!(Solution::reverse_words(String::from("a good example")), String::from("example good a"));
}
}