给定一个字符串,逐个翻转字符串中的每个单词。
示例:
输入: ["t","h","e"," ","s","k","y"," ","i","s"," ","b","l","u","e"] 输出: ["b","l","u","e"," ","i","s"," ","s","k","y"," ","t","h","e"]
注意:
- 单词的定义是不包含空格的一系列字符
- 输入字符串中不会包含前置或尾随的空格
- 单词与单词之间永远是以单个空格隔开的
进阶:使用 O(1) 额外空间复杂度的原地解法。
第一种思路:
一顿调库猛如虎。
class Solution(object):
def reverseWords(self, string):
"""
:type str: List[str]
:rtype: None Do not return anything, modify str in-place instead.
"""
string[:] = list(" ".join("".join(string).split(" ")[::-1]))
第二种思路:
先写一个工具函数,功能是把string中的某一段进行原地翻转,
然后先把整个string进行一次翻转,
再对string里的每个单词进行一次翻转。
class Solution(object):
def reverseWords(self, string):
"""
:type str: List[str]
:rtype: None Do not return anything, modify str in-place instead.
"""
l = len(string)
if not l:
return
def reverse(start, end): #工具函数,功能是将string[start:end + 1]翻转
left, right = start, end
while(left < right):
string[left], string[right] = string[right], string[left]
left += 1
right -= 1
reverse(0, l - 1) #先整个翻转
first_char_idx = 0
for i, x in enumerate(string):
if x == " ":
reverse(first_char_idx, i - 1) #再把每个单词进行翻转
first_char_idx = i + 1
reverse(first_char_idx, l - 1)#把最后一个单词翻转

博客围绕给定字符串,介绍逐个翻转其中每个单词的方法。明确单词定义,输入无前后置空格且单词以单空格分隔,还提及进阶的O(1)额外空间复杂度原地解法。给出两种思路,一是调库,二是先写原地翻转函数,再对整体和每个单词翻转。

405

被折叠的 条评论
为什么被折叠?



