示例 1:
输入:s = "the sky is blue"
输出:"blue is sky the"
示例 2:
输入:s = " hello world "
输出:"world hello"
解释:输入字符串可以在前面或者后面包含多余的空格,但是翻转后的字符不能包括。
示例 3:
输入:s = "a good example"
输出:"example good a"
解释:如果两个单词间有多余的空格,将翻转后单词间的空格减少到只含一个。
示例 4:
输入:s = " Bob Loves Alice "
输出:"Alice Loves Bob"
示例 5:
输入:s = "Alice does not even like bob"
输出:"bob like even not does Alice"
提示:
-
1 <= s.length <= 104
-
s
包含英文大小写字母、数字和空格' '
-
s
中 至少存在一个 单词
进阶:
- 请尝试使用
O(1)
额外空间复杂度的原地解法。
2、思路
(数组翻转) O ( n ) O(n) O(n)
对于样例 "the sky is blue"
分两步操作:
-
1、将字符串中的每个单词逆序,样例输入变为:
"eht yks si eulb"
; -
2、将整个字符串逆序,样例输入变为:
"blue is sky the"
;
图示样例过程:
1、将i
和j
指针指向字符串的开头,并让j
指针跳过字符串s
单词的前导空格,指向单词的首非空字符。
2、再让i
和j
指针指向同一个位置,并让j
指针跳过若干个非空字符指向单词后的第一个空格。
3、将i
和j
指针之间的单词翻转。
4、我们将翻转后的单词重新赋值给字符串s
的前若干个字符(长度为单词的大小),重复上述过程。
5、最后将整个字符串翻转。
细节:
-
赋值之后要给单词后补个空格作为单词之间的分隔符。
-
最后要将字符串
s
之后多余的空格擦除。
最后
本人也收藏了一份Java面试核心知识点来应付面试,借着这次机会可以免费送给我的读者朋友们:
目录:
Java面试核心知识点
一共有30个专题,足够读者朋友们应付面试啦,也节省朋友们去到处搜刮资料自己整理的时间!
Java面试核心知识点
目录:
[外链图片转存中…(img-4Q2MisEU-1628633544741)]
Java面试核心知识点
一共有30个专题,足够读者朋友们应付面试啦,也节省朋友们去到处搜刮资料自己整理的时间!
[外链图片转存中…(img-qQ2nFXCn-1628633544744)]
Java面试核心知识点
资料的领取方式:点赞后【戳面试资料】即可免费获取哦!