解法:
同“我的心路”。
class Solution:
def reverseWords(self, s: List[str]) -> None:
"""
Do not return anything, modify s in-place instead.
"""
self.reverse(s, 0, len(s))
begin = 0
for i in range(len(s) + 1):
if i == len(s) or s[i] == ' ':
self.reverse(s, begin, i)
begin = i + 1
def reverse(self, s, begin, end):
for i in range((end - begin) // 2):
tmp = s[begin + i]
s[begin + i] = s[end - i - 1]
s[end - i - 1] = tmp
我的心路:
讓原字符串原地翻轉有一個問題要解決,就是原地翻轉的話字符串中的單詞會跟着翻轉。於是先將原字符串中的所有單詞翻轉,然後將整個字符串翻轉,則單詞翻回原樣。這是一個two-pass算法,時間複雜度,空間複雜度,其中是字符串中的單詞平均長度。我的解法和clean code handbook相同,解法很容易想到,最終結果也還不錯,但時間複雜度似乎還需要進步。
class Solution(object):
def reverseWords(self, s):
"""
:type s: List[str]
:rtype: None Do not return anything, modify s in-place instead.
"""
left = 0
for i in range(len(s)):
if s[i] == ' ' or i == len(s) - 1:
right = i - 1
if i == len(s) - 1:
right = i
while left < right:
tmp = s[left]
s[left] = s[right]
s[right] = tmp
left += 1
right -= 1
left = i + 1
s_len = len(s)
for i in range(s_len // 2):
tmp = s[i]
s[i] = s[s_len - 1 - i]
s[s_len - 1 - i] = tmp
Runtime: 244 ms, faster than 41.75% of Python online submissions forReverse Words in a String II.
Memory Usage: 21.1 MB, less than 100.00% of Python online submissions for Reverse Words in a String II.