Swift, 只反转字母
Swift, Reverse only letters
我遇到了问题。当我尝试使用双指针模式仅反转 swift 中的字母时,它实际上是在进行交换。
示例 - 测试 123 字符串
2 指针输出 - gnir 123 tStseT
预期输出 - tseT 123 gnirtS
有人可以建议这个方法,或者给出代码示例吗?
func reverseOnlyLetters(_ S: String) -> String {
var a = Array(S.unicodeScalars)
var i = 0
var j = a.count - 1
while i < j {
while !CharacterSet.letters.contains(a[i]) && i < j { i += 1 }
while !CharacterSet.letters.contains(a[j]) && i < j { j -= 1 }
let t = a[i]
a[i] = a[j]
a[j] = t
i += 1
j -= 1
}
var ret = ""
a.forEach({ ret += String(Character(UnicodeScalar([=11=]))) })
return ret
}
试试这个:
func reverseOnlyLetters(_ S: String) -> String {
let components = S.components(separatedBy: " ")
let reversedComponents = components.map { Int([=10=]) == nil ? String([=10=].reversed()) : [=10=] }
return reversedComponents.joined(separator: " ")
}
如果还是不对,请给我更多信息
我遇到了问题。当我尝试使用双指针模式仅反转 swift 中的字母时,它实际上是在进行交换。 示例 - 测试 123 字符串 2 指针输出 - gnir 123 tStseT 预期输出 - tseT 123 gnirtS 有人可以建议这个方法,或者给出代码示例吗?
func reverseOnlyLetters(_ S: String) -> String {
var a = Array(S.unicodeScalars)
var i = 0
var j = a.count - 1
while i < j {
while !CharacterSet.letters.contains(a[i]) && i < j { i += 1 }
while !CharacterSet.letters.contains(a[j]) && i < j { j -= 1 }
let t = a[i]
a[i] = a[j]
a[j] = t
i += 1
j -= 1
}
var ret = ""
a.forEach({ ret += String(Character(UnicodeScalar([=11=]))) })
return ret
}
试试这个:
func reverseOnlyLetters(_ S: String) -> String {
let components = S.components(separatedBy: " ")
let reversedComponents = components.map { Int([=10=]) == nil ? String([=10=].reversed()) : [=10=] }
return reversedComponents.joined(separator: " ")
}
如果还是不对,请给我更多信息