题目
难度:★☆☆☆☆
类型:字符串
给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。
注意:在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。
示例
输入: "Let's take LeetCode contest"
输出: "s'teL ekat edoCteeL tsetnoc"
解答
方案1:拆分单词
我们可以把句子中每个单词提取出来并反转,再把反转后的单词连接成句子即可。
"I love you" => ["I", "love", "you"] => ["I", "evol", "uoy"] => "I evol uoy"
class Solution:
def reverseWords(self, s: str) -> str:
def reverse_word(word):
"""
翻转一个单词
:param word:
:return:
"""
chars = list(word) # 字符串列表化
reversed_chars = reversed(chars) # 反转列表
return ''.join(reversed_chars) # 连成字符串
res = '' # 结果
for word in s.split(' '): # 句子拆分成单词列表
res += reverse_word(word) + ' ' # 逆序的单词连成列表
return res[:-1] # 去掉末尾空格
熟悉python的读者可以看下面的紧凑形式:
class Solution:
def reverseWords(self, s: str) -> str:
return ' '.join(map(lambda word: ''.join(reversed(list(word))), s.split(' ')))
方案2:双重逆序
我们可以将列表中的单词顺序调换,然后将调换位置后的结果组成新的句子,再将句子逆序。
"I love you" => ["I", "love", "you"] => ["you", "love", "I"] => "you love I" => "I evol uoy"
class Solution:
def reverseWords(self, s: str) -> str:
return ' '.join(s.split(' ')[::-1])[::-1]
如有疑问或建议,欢迎评论区留言~