557. 反转字符串中的单词 III
给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。
示例一:
输入:"Let's take LeetCode contest"
输出:"s'teL ekat edoCteeL tsetnoc"
解题方法:双指针
class Solution {
func reverseWords(_ s: String) -> String {
let charArray = Array(s)
let length = charArray.count
var result = ""
var end = 0
while end < length {
let start = end
while end < length && charArray[end] != " " {
end += 1
}
for i in start..<end {
result += String(charArray[start + end - 1 - i])
}
if end < length && charArray[end] == " " {
end += 1
result += " "
}
}
return result
}
}
解题思路
开辟一个新字符串。然后从头到尾遍历原字符串,直到找到空格为止,此时找到了一个单词,并能得到单词的起止位置。随后,根据单词的起止位置,可以将该单词逆序放到新字符串当中。如此循环多次,直到遍历完原字符串,就能得到翻转后的结果。
复杂度分析
- 时间复杂度:
O(N)
,其中N
为字符数组的长度。 - 空间复杂度:
O(N)
。