解法:
同“我的心路”。
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.