加载中...
557-反转字符串中的单词 III(Reverse Words in a String III)
发表于:2021-12-03 | 分类: 简单
字数统计: 727 | 阅读时长: 3分钟 | 阅读量:

原文链接: https://leetcode-cn.com/problems/reverse-words-in-a-string-iii

英文原文

Given a string s, reverse the order of characters in each word within a sentence while still preserving whitespace and initial word order.

 

Example 1:

Input: s = "Let's take LeetCode contest"
Output: "s'teL ekat edoCteeL tsetnoc"

Example 2:

Input: s = "God Ding"
Output: "doG gniD"

 

Constraints:

  • 1 <= s.length <= 5 * 104
  • s contains printable ASCII characters.
  • s does not contain any leading or trailing spaces.
  • There is at least one word in s.
  • All the words in s are separated by a single space.

中文题目

给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。

 

示例:

输入:"Let's take LeetCode contest"
输出:"s'teL ekat edoCteeL tsetnoc"

 

提示:

  • 在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。

通过代码

高赞题解

解题思路

因为在 Python 中字符串是不可变,因此遍历字符串交换每个单词内字符位置的方法不太可行,但是利用 Python 切片的便利,可以写出更优雅的实现方式。

1、常规思路

将字符串分割成单词列表 然后把每个单词反转切片

代码
[]
class Solution(object): def reverseWords(self, s): return " ".join(word[::-1] for word in s.split(" "))
分析
  • 时间复杂度: $O(n)$ 。其中 $n$ 是字符串的长度。
  • 空间复杂度: $O(1)$ 。

2、利用两次切片,不需遍历

先反转单词列表 再反转字符串

以字符串 “I love drag queen” 为例:

s.split(“ “) 将字符串分割成单词列表:

['I', 'love', 'drag', 'queen']

s.split(“ “)[::-1] 将单词列表反转:

['queen', 'drag', 'love', 'I']

“ “.join(s.split(“ “)[::-1]) 将单词列表转换为字符串,以空格分隔:

"queen drag love I"

“ “.join(s.split(“ “)[::-1])[::-1] 将字符串反转:

”I evol gard neeuq“
代码
[]
class Solution(object): def reverseWords(self, s): return " ".join(s.split(" ")[::-1])[::-1]
分析
  • 时间复杂度: $O(n)$ 。其中 $n$ 是字符串的长度。
  • 空间复杂度: $O(1)$ 。

或者,

3、先反转字符串,再反转单词列表

s[::-1] 反转字符串:

“neeuq gard evol I”

s[::-1].split(“ “) 将字符串分割成单词列表:

['neeuq', 'gard', 'evol', 'I']

s[::-1].split(“ “)[::-1] 将单词列表反转:

['I', 'evol', 'gard', 'neeuq']

“ “.join(s[::-1].split(“ “)[::-1]) 将单词列表转换为字符串,以空格分隔:

“I evol gard neeuq”
代码
[]
class Solution(object): def reverseWords(self, s): return " ".join(s[::-1].split(" ")[::-1])
分析
  • 时间复杂度:$O(n)$。其中 $n$ 是字符串的长度。
  • 空间复杂度:$O(1)$。

统计信息

通过次数 提交次数 AC比率
179604 241513 74.4%

提交历史

提交时间 提交结果 执行时间 内存消耗 语言

相似题目

题目 难度
反转字符串 II 简单
上一篇:
560-和为 K 的子数组(Subarray Sum Equals K)
下一篇:
561-数组拆分 I(Array Partition I)
本文目录
本文目录