任务目标
给定一个字符串,我们需要反转其中单词的顺序,但不需要改变单词本身。例如,对于 "Learning Python is easy",反转后的字符串应该是 "easy is Python Learning"(单词顺序颠倒)。
使用 split() 和 join()
在这个方法中,我们利用 INLINECODEd90f3dd3 将字符串拆分为单词列表,然后反转该列表,最后使用 INLINECODEb2bcf667 将它们重新组合成单个字符串。
Python
s = "Python is fun"
res = ‘ ‘.join(s.split()[::-1])
print(res)
Output
fun is Python
原理解析:
s.split()将字符串拆分为一个单词列表。[::-1]对单词列表进行切片反转操作。‘ ‘.join(...)将反转后的单词拼接成一个字符串,单词之间用空格分隔。
使用循环遍历
这种方法通过手动以相反的顺序遍历单词列表,逐步构建反转后的字符串。当我们希望在代码中显式地控制整个过程时,这会非常有帮助。
Python
s = "Python is fun"
words = s.split()
res = ""
for word in reversed(words):
res += word + " "
res = res.strip()
print(res)
Output
fun is Python
原理解析:
s.split()将字符串拆分为一个单词列表。reversed(words)创建一个迭代器,用于反向遍历列表。- 在循环内部,
res += word + " "将每个单词追加到结果字符串后面,并加上一个空格。 res.strip()用于移除字符串末尾多余的空格。
使用 collections 中的 deque
对于较长的字符串,使用 deque(双端队列)是非常高效的,因为它允许我们在两端以 O(1) 的时间复杂度进行弹出操作。我们可以利用 pop() 方法来按相反的顺序获取单词。
Python
from collections import deque
s = "Python is fun"
words = deque(s.split())
res = ""
while words:
res += words.pop() + " "
res = res.strip()
print(res)
Output
fun is Python
原理解析:
deque(s.split())创建一个双端队列,以便快速从两端弹出元素。words.pop()从双端队列的末尾移除并返回一个单词。res += ...将获取到的单词追加到结果中,并加上空格。res.strip()清理末尾的空格。
使用栈(Stack)
这种方法利用栈(一种后进先出 LIFO 的数据结构)来反转单词的顺序。我们将所有单词压入栈中,然后依次弹出,从而得到逆序的结果。
Python
s = "Python is fun"
words = s.split()
stack = []
for word in words:
stack.append(word)
res = ""
while stack:
res += stack.pop() + " "
res = res.strip()
print(res)
Output
fun is Python
原理解析:
stack.append(word)将每个单词压入栈中。stack.pop()弹出最后压入的单词,从而实现了单词顺序的反转。