leetcode打卡-0151翻转字符串里的单词
题目描述
给定一个字符串,逐个翻转字符串中的每个单词。
说明:无空格字符构成一个单词;输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括;如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。
示例:
输入:s = " Bob Loves Alice "
输出:"Alice Loves Bob"
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-words-in-a-string
解题思路
1. 无情的API调用工程师
字符串的分解拼接,大多数高级语言本身或者其标准库内,都有对应的实现,这题可以考虑直接分解字符串s,翻转后再合并成字符串,以Python为例。
1 | class Solution: |
一行搞定,简单明了,Python真是拯救头发的好语言。
- 时间复杂度: O(n)
- 空间复杂度: O(n)
用Rust也能写,就是复杂一点。
1 | impl Solution { |
2. 双端队列或者栈
涉及到翻转的问题,可以考虑用栈的前进后出的特性来解决,此题中遍历原字符串,拆分单词,压入栈中,然后弹出组成新字符串即可。
不过Python中的双端队列效率也挺高,按照左端插入的方式,也能得到类似的效果,将单词一个个压入队列头部,最后转成字符串处理。
1 | class Solution: |
- 时间复杂度O(n)
- 空间复杂度O(n)
还没学到Rust该怎么写双端队列,后面学会了再来补充一下。