题目描述(中等难度)
将字符串的每个单词反过来,单词内部不需要逆转,注意可能会有多余的空格。
解法一
题目很直观,做法也会很直观,哈哈。遍历原字符串,遇到字母就加到一个 变量中,遇到空格,如果 temp
变量不为空,就把 temp
组成的单词加到一个栈中,然后清空 temp
继续遍历。
最后,将栈中的每个单词依次拿出来拼接即可。
有一个技巧可以用,就是最后一个单词后边可能没有空格,为了统一,我们可以人为的在字符串后边加入一个空格。
解法二
可以看下题目中的 Follow up
。
如果用 C 语言,试着不用额外空间解决这个问题。
我们一直用的是 java,而 java 中的 变量是不可更改的,如果对它修改其实又会去重新创建新的内存空间。
而 C 语言不同,C 语言中的 string
本质上其实是 char
数组,所以我们可以在给定的 string
上直接进行修改而不使用额外空间。
为了曲线救国,继续用 java 实现,我们先将 String
转为 数组,所有的操作都在 char
数组上进行。
至于算法的话,参考了 这里-no-split(-)-no-StringBuilder)。
- 原地逆转每个单词
具体代码的话就直接从 -no-split(-)-no-StringBuilder) 粘贴过来了,写的很简洁。几个封装的函数,关键就是去解决怎么原地完成。
总
一开始没有 get
到题目要求空间复杂度为 O(1)
的想法,后来在 中才突然明白。
添加好友一起进步~
如果觉得有帮助的话,可以点击 给一个 star 哦 ^^