如何在 Swift 中检查字符串是否对称
How to check a string is symmetric or not in Swift
return 值 == 字符串 (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 描述字符串来做到这一点。所以你不能仅仅使用偏移逻辑来快速计算一个字符的索引,你必须枚举每个字符,检查每个字符的长度才能到达下一个字符。 Objective-C NSString 的私有子类的潜力使这变得更加复杂,每个子类都可以有不同的编码方法。
return 值 == 字符串 (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 描述字符串来做到这一点。所以你不能仅仅使用偏移逻辑来快速计算一个字符的索引,你必须枚举每个字符,检查每个字符的长度才能到达下一个字符。 Objective-C NSString 的私有子类的潜力使这变得更加复杂,每个子类都可以有不同的编码方法。