题目描述
给定一个字符串,逐个翻转字符串中的每个单词。
示例 1:
输入: "the sky is blue"
输出: "blue is sky the"
示例 2:
输入: " hello world! "
输出: "world! hello"
解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
示例 3:
输入: "a good example"
输出: "example good a"
解释: 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。
代码示例
class Solution:
def reverseWords(self, s: str) -> str:
# 将字符串拆分为单词,即转换成列表类型
words = s.split()
# 反转单词
left, right = 0, len(words) - 1
while left < right:
words[left], words[right] = words[right], words[left]
left += 1
right -= 1
# 将列表转换成字符串
return " ".join(words)
# 示例
solution = Solution()
result = solution.reverseWords("Let's practice coding")
print(result)
第一眼看到这个问题时,我首先考虑了一种入栈和出栈的方式。将字符串按单词拆分,并通过入栈的方式将单词加入列表中,接着通过出栈的方式将这些单词拼接起来。这样的方法相对直观,通过栈的数据结构实现了单词的反转。
然而,在阅读了代码随想录之后,我发现了一种更为简洁高效的解决方案——双指针法。通过使用双指针,可以在不需要额外的数据结构的情况下实现单词的反转,从而减少了空间复杂度。这种方法利用左右指针对列表中的单词进行前后交换,最终得到反转后的结果。这种实现不仅简单明了,而且在性能上也更为出色。在今后的编程中,我期待能够灵活运用这样的思路解决更多有趣的问题。