<filename>100-199/150-159/151.py
"""
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.

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.

Example 4:
Input: s = '  <NAME>  Alice   ',  Output: '<NAME> Bob'

Example 5:
Input: s = 'Alice does not even like bob',  Output: 'bob like even not does Alice'
"""


def reverse_words(s):
    return ' '.join(reversed(s.split()))


assert reverse_words('the sky is blue') == 'blue is sky the'
assert reverse_words('  hello world  ') == 'world hello'
assert reverse_words('a good   example') == 'example good a'
assert reverse_words('  Bob    Loves  Alice   ') == '<NAME> Bob'
assert reverse_words('Alice does not even like bob') == 'bob like even not does Alice'

<filename>100-199/150-159/151.py
"""
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.

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.

Example 4:
Input: s = '  <NAME>  Alice   ',  Output: '<NAME> Bob'

Example 5:
Input: s = 'Alice does not even like bob',  Output: 'bob like even not does Alice'
"""


def reverse_words(s):
    return ' '.join(reversed(s.split()))


assert reverse_words('the sky is blue') == 'blue is sky the'
assert reverse_words('  hello world  ') == 'world hello'
assert reverse_words('a good   example') == 'example good a'
assert reverse_words('  Bob    Loves  Alice   ') == '<NAME> Bob'
assert reverse_words('Alice does not even like bob') == 'bob like even not does Alice'

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.  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.  Example 4: Input: s = '  <NAME>  Alice   ',  Output: '<NAME> Bob'  Example 5: Input: s = 'Alice does not even like bob',  Output: 'bob like even not does Alice'