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)

参考链接