151. 反转字符串中的单词
分析
- 去除多余空格:
- 遍历字符串,将所有单词移动到前面,同时移除多余的空格
- 用一个变量
k
表示当前写入位置
- 逐个反转单词:
- 每次遇到非空格字符时,确定单词的起始位置
i
- 继续遍历直到单词结束,将单词拷贝到字符串前面
- 对该单词的字符进行局部反转
- 在单词末尾添加空格,准备下一个单词的处理
- 每次遇到非空格字符时,确定单词的起始位置
- 清理末尾多余空格:
- 如果最后多余了一个空格,则将其删除
- 整体反转字符串:
- 将整个字符串反转,得到单词顺序颠倒的最终结果
时间复杂度
- 遍历字符串三次:去除多余空格
O(n)
、单词局部反转O(n)
、整体反转O(n)
总时间复杂度为 O(n)
空间复杂度
空间复杂度为 O(1)
C++代码
|
|