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"