0186-reverse-words-in-a-string-ii¶
Try it on leetcode
Description¶
Given a character array 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 a single space.
Your code must solve the problem in-place, i.e. without allocating extra space.
Example 1:
Input: s = ["t","h","e"," ","s","k","y"," ","i","s"," ","b","l","u","e"] Output: ["b","l","u","e"," ","i","s"," ","s","k","y"," ","t","h","e"]
Example 2:
Input: s = ["a"] Output: ["a"]
Constraints:
1 <= s.length <= 105
s[i]
is an English letter (uppercase or lowercase), digit, or space' '
.- There is at least one word in
s
. s
does not contain leading or trailing spaces.- All the words in
s
are guaranteed to be separated by a single space.
Solution(Python)¶
class Solution:
def reverseWords(self, s: List[str]) -> None:
"""
Do not return anything, modify s in-place instead.
"""
if s is None:
return
s.reverse()
n = len(s)
i = 0
j = 0
while i< n and j<n:
# swap word
while j <n and s[j] != " " :
j+=1
k = i
l = j - 1
while k < l and l < n:
s[k],s[l] = s[l],s[k]
k+=1
l-=1
#next word
i = j +1
j+=2