186. 反转字符串中的单词 II - Kotlin 两次翻转

Smile_slime_47

Problem: 186. 反转字符串中的单词 II

思路

以样例为例:the sky is blue

将样例整体翻转一遍,得到:eulb si yks eht

此时可以发现单词的顺序已经满足翻转的条件,只不过每个单词内部的字母额外翻转了一次

此时以空格为分界,对每个字母单独再翻转一次即可得到结果:blue is sky the

复杂度

  • 时间复杂度:

  • 空间复杂度:

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
class Solution {
fun reverseWords(s: CharArray): Unit {
var begin=0
var end=0
var left=0
var right=0

left=0
right=s.size-1
while (left<right){
val tmp=s[left]
s[left]=s[right]
s[right]=tmp

left++
right--
}

while (end<s.size){
if(end==s.size-1||s[end+1]==' '){
left=begin
right=end
while (left<right){
val tmp=s[left]
s[left]=s[right]
s[right]=tmp

left++
right--
}
begin=end+2
}
end++
}
}
}
Comments
On this page
186. 反转字符串中的单词 II - Kotlin 两次翻转