python 反转字符串中单词思路详解
题目
给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。
示例 1:
输入: “Let’s take LeetCode contest”
输出: “s’teL ekat edoCteeL tsetnoc”
注意:在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。
来源:https://leetcode-cn.com/problems/reverse-words-in-a-string-iii
解题思路
因为在 Python
中字符串是不可变,因此遍历字符串交换每个单词内字符位置的方法不太可行,但是利用 Python
切片的便利,可以写出更优雅的实现方式。
1、常规思路
将字符串分割成单词列表 然后把每个单词反转切片
代码
|
|
分析
- 时间复杂度: O(n) 。其中 n 是字符串的长度。
- 空间复杂度: O(1) 。
2、利用两次切片,不需遍历
先反转单词列表 再反转字符串
以字符串
“I love drag queen”
为例:
s.split(“ “) 将字符串分割成单词列表:
|
|
s.split(“ “)[::-1] 将单词列表反转:
“ “.join(s.split(“ “)[::-1]) 将单词列表转换为字符串,以空格分隔:
“ “.join(s.split(“ “)[::-1])[::-1] 将字符串反转:
代码
|
|
分析
- 时间复杂度: O(n) 。其中 n 是字符串的长度。
- 空间复杂度: O(1) 。
或者,
3、先反转字符串,再反转单词列表
s[::-1] 反转字符串:
s[::-1].split(“ “) 将字符串分割成单词列表:
s[::-1].split(“ “)[::-1] 将单词列表反转:
“ “.join(s[::-1].split(“ “)[::-1]) 将单词列表转换为字符串,以空格分隔:
代码
|
|
分析
- 时间复杂度:O(n)。其中 n 是字符串的长度。
- 空间复杂度:O(1)。