###题目
给定一个字符串,逐个翻转字符串中的每个单词。
- 输入: "the sky is blue"
- 输出: "blue is sky the"
- 输入: " hello world! "
- 输出: "world! hello"
- 解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
- 输入: "a good example"
- 输出: "example good a"
- 解释: 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。
###思路
第一反应就是用栈就可以了。因为每个字符串只有相对顺序是逆序的,字符串内部的单词并没有变化,所以只要将每个单词压入栈中,待全部压入栈中之后再弹出就可以了,思路比较简单,主要是要注意一些细节上的地方。不过对进阶要求就是要去原地解法了。在解法二里面介绍吧。
###code
class
###思路
原地算法是不使用额外的内存空间,原理上可能比上一个算法更好理解,就是代码实际写的时候难度大一点。
- 首先将字符串整个翻转,这样字符串就从相对逆序变成正序了,只是每个单词自身是逆序的。
- 找到字符串中每个单词的起点和终点,然后将起点和终点范围内的字符翻转。
- 删除掉前后两端多余的空格。
大概的一个思路流程是上面那样,不过代码具体实现细节不同,可以看注释。
###code
class