// 给一个字符串,将其按照单词顺序进行反转。比如说 "the sky is blue", 那么反转就是 "blue is sky the"。
// 反转字符串
fileprivate func reverse<T> (_ chars: inout [T], _ start: Int, _ end: Int) {
// 首下标, 末下标
var start = start, end = end
while start < end {
// 交换两个下标之间的数据
(chars[start], chars[end]) = (chars[end], chars[start])
// 下标向中间移动
start += 1
end -= 1
}
}
// 反转句子, 以单词反转
func reverseWords(s:String?) -> String? {
// 如果字符串不存在则返回
guard let s = s else {
return nil
}
// 将字符串转换为字符数组
var chars = Array(s), start = 0
// 反转字符数组
reverse(&chars, 0, chars.count - 1);
// 遍历字符数组
for i in 0 ..< chars.count {
// 如果下标i走到空格, 直到末尾
if i == chars.count - 1 || chars[i+1] == " " {
// 反转从start到i这段数组当中的字符
reverse(&chars, start, i)
// start后移, 跳过空格
start = i + 2
}
}
// 返回反转后的字符串
return String(chars)
}
// 反转前
let str = "the sky is blue"
// 打印
print("反转前: " + str)
// 反转后
let reverseStr:String? = reverseWords(s: str)
// 打印
print("反转后: " + reverseStr!)