【发布时间】:2021-05-09 17:48:26
【问题描述】:
返回值 == String(value.reversed())
这是我尝试过的。它运作良好,但需要更长的时间。有谁知道更好的方法吗?
【问题讨论】:
-
这是一个标准(且简单)的算法问题,用于检查字符串是否为回文。有很多资源,包括这个:github.com/raywenderlich/swift-algorithm-club
返回值 == String(value.reversed())
这是我尝试过的。它运作良好,但需要更长的时间。有谁知道更好的方法吗?
【问题讨论】:
String 或其他任何东西的标准库中没有可用的内容,因此仅适用于 String 的解决方案可能不是最佳选择。
你不需要创建基于reversed 的任何东西的新实例; elementsEqual 完成这项工作。
public extension Sequence where Element: Equatable {
var isSymmetric: Bool { elementsEqual(reversed()) }
}
"?????".isSymmetric // true
"???".isSymmetric // false
【讨论】:
您可以在 c 中从头到尾一次测试每个字符,直到您的两个索引在中间相遇。但是对于 Swift,你不能保证 Swift 字符串中的字符长度相同,它们必须存储由 unicode 字符组成的字符串,目前可以有 100,000 个字符之一,我认为他们目前通过使用 UTF16 对字符串进行故事化来做到这一点。所以你不能只使用偏移逻辑来快速计算一个字符的索引,你必须枚举每个字符,检查每个字符的长度才能到达下一个。由于 NSString 的私有子类的潜力,Objective-C 使这变得更加复杂,每个子类都可以有不同的编码方法。
【讨论】: