151. 翻转字符串里的单词
题目
给定一个字符串,逐个翻转字符串中的每个单词。
示例 1:
输入: "the sky is blue"
输出: "blue is sky the"
示例 2:
输入: " hello world! "
输出: "world! hello"
解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
示例 3:
输入: "a good example"
输出: "example good a"
解释: 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。
说明:
- 无空格字符构成一个单词。
- 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
- 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。
解题思路
思路一:利用语言特性
python 语言中提供 split 切割,join 连接等方法,可以直接调用内置方法解决该问题。
具体的步骤:
- 使用 spilt 将字符进行切割,得到字符串列表
- 使用切片操作反转字符串列表
- 使用 join 将反转后的字符串列表用空格拼接。
当用此方法编写代码完成后,可以考虑自己编写函数实现,或者换其他思路实现。
思路二:双指针
因为最终结果需要数组进行倒序后输出,所以在尾部进行双指针定义,倒序遍历数组。
题目中说明【无空格字符构成一个单词】。那么按照这个原则,确定单词边界,将单词添加到定义的列表中。
最终的步骤也是将单词列表拼接返回。
具体过程如下图:
代码实现
语言特性:代码实现
class Solution:
def reverseWords(self, s: str) -> str:
return ' '.join(s.split()[::-1])
双指针:代码实现
class Solution:
def reverseWords(self, s: str) -> str:
# 尾部定义指针
p = len(s) - 1
# 定义返回结果
ans = []
while p >= 0:
# 倒序遍历,这里先去除尾部空格
while p >= 0 and s[p] == ' ':
p -= 1
# 重置指针
q = p
# 这一步防止开头存在空格,
# 最终却把空格添加到返回结果中
if q < 0:
break
# 确定单词边界
while p >= 0 and s[p] != ' ':
p -= 1
# 将单词放到结果中
ans.append(s[p + 1:q + 1])
# 拼接返回结果
return ' '.join(ans)
实现结果
语言特性:实现结果
双指针:实现结果
以上就是使用语言特性,或者使用双指针的方法来解决《151. 翻转字符串里的单词》问题的主要内容。