1. 题目:
给定一个字符串,逐个翻转字符串中的每个单词。
示例 1:
输入: "the sky is blue"
输出: "blue is sky the"
示例 2:
输入: " hello world! "
输出: "world! hello"
解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
示例 3:
输入: "a good example"
输出: "example good a"
解释: 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。
2. Python3代码解答:
class Solution:
def reverseWords(self, s: str) -> str:
# 将字符串拆分成单词,并将单词储存为列表words
wrods = s.split()
# 进行单词的反转,首先定义左右两个指针
left, right = 0, len(wrods) - 1
# 当左指针一直在右指针左边的时候
while left < right:
# 对左右指针指向的两个单词进行交换
wrods[left],wrods[right] = wrods[right], wrods[left]
# left右移,right左移
left += 1
right -= 1
# 将交换之后的列表转化成字符串,这里使用空格 " " 作为分隔符来连接 words 列表中的所有元素
# wrods是包含字符串元素的可迭代对象(如列表或元组),理解成需要进行连接成字符串的元组
return " ".join(wrods)
3. 上述代码实现解析:
上述代码是一个Python类方法,实现反转一个字符串中的单词顺序,实现步骤可以分为以下几个部分:
-
拆分字符串:
words = s.split()
- 使用
split()
方法将输入的字符串s
按空白字符(如空格)拆分成单词,并将这些单词存储为列表words
。例如,如果输入是"the sky is blue"
,那么words
将会是['the', 'sky', 'is', 'blue']
。
-
反转单词列表:
- 使用两个指针
left
和right
,分别初始化为列表的开始位置和结束位置。 - 使用
while
循环,当left
小于right
时,交换left
和right
指向的元素,然后将left
向右移动一位,right
向左移动一位。这样可以将列表中的单词顺序完全反转。例如,上面的例子将变为['blue', 'is', 'sky', 'the']
。
- 使用两个指针
-
将列表转换回字符串:
return " ".join(words)
- 使用
join()
方法,通过空格" "
将列表words
中的单词连接成一个新的字符串。因为words
列表已经被反转,所以这个新字符串中的单词顺序也是反转的。 - 继续上面的例子,最终返回的字符串将是
"blue is sky the"
。
上述方法将输入的字符串按单词进行反转,不改变单词内部的字符顺序,只改变单词之间的顺序。
4. 相关重点代码解释
在这段代码中,使用 s.split()
将字符串按空白字符拆分成单词后,每个元素(即列表中的每一项)代表一个完整的单词,而不是单个字母。因此,当使用两个指针 left
和 right
来交换元素时,实际上是在交换整个单词。
separator.join(iterable)
join()
方法是 Python 中的一个非常有用的字符串方法,它用于将序列中的元素连接成一个新的字符串。这个序列通常是一个列表或元组,其中的元素都必须是字符串。
这个方法的基本语法如下:
其中,separator
是你希望用来连接序列中元素的字符串,iterable
是包含字符串元素的可迭代对象(如列表或元组)。
使用例子
如果你有一个列表 ['apple', 'banana', 'cherry']
并想用逗号 ,
将它们连接起来,你可以这样做:
fruits = ['apple', 'banana', 'cherry']
result = ', '.join(fruits)
print(result) # 输出: apple, banana, cherry
这里的 ', '
是分隔符,它被放在列表中的每个元素之间。
在反转单词的代码中的作用
在你的原始代码中:
return " ".join(words)
这里的 " ".join(words)
使用一个空格 " "
作为分隔符来连接 words
列表中的所有元素。因为 words
列表中的每个元素是一个单词,所以当它们被连接成一个字符串时,单词之间会有一个空格,形成了一个正常阅读的句子结构。
注意事项
- 使用
join()
方法时,序列中的所有元素都必须是字符串。如果序列中有非字符串类型的元素,比如整数或浮点数,那么在调用join()
之前,你需要将它们转换成字符串。 join()
是一个非常高效的方法,通常比其他字符串连接方法(如使用+
或字符串格式化)要快,特别是在连接大量的字符串时。这是因为join()
在内部优化了内存分配和处理过程。
综上,本文的对于力扣151. 反转字符串中的单词 的Python3解答,仅仅是个人学习资料记录,也十分高兴我的见解可以帮助其他的正在做这个题目的同学,基础较差,仅仅是个人见解,大神勿喷,欢迎交流,谢谢!