Description: Given a string s, reverse the order of characters in each word within a sentence while still preserving whitespace and initial word order.

Code:

def reverseWords(self, s: str) -> str:
        result = list(s)
        left = 0

        while left < len(result):
            # Skip spaces
            if result[left] == ' ':
                left += 1
                continue

            # Find end of word
            right = left
            while right < len(result) and result[right] != ' ':
                right += 1

            # Reverse word in-place from left to right - 1
            l, r = left, right - 1
            while l < r:
                result[l], result[r] = result[r], result[l]
                l += 1
                r -= 1

            # Move to next word
            left = right

        return ''.join(result)

Efficiency:

Time Complexity: O(n)

Space Complexity: O(n)

Test:

s = "Let's take LeetCode contest"
print(reverseWords(s)) # "s'teL ekat edoCteeL tsetnoc"

s = "Mr Ding"
print(reverseWords(s)) # "rM gniD"