如何在 Swift 中检查字符串是否对称

时间:2021-05-09 17:48:26

标签: swift string symmetric

返回值 == String(value.reversed())

这是我试过的。它运作良好,但需要更长的时间。有人知道更好的方法吗?

2 个答案:

答案 0 :(得分:2)

标准库中没有可用于 String 或其他任何东西的内容,因此仅适用于 String 的解决方案可能不是最佳选择。

您不需要基于 reversed 创建任何新实例; elementsEqual 完成工作。

public extension Sequence where Element: Equatable {
  var isSymmetric: Bool { elementsEqual(reversed()) }
}
"?????".isSymmetric // true
"???".isSymmetric // false

答案 1 :(得分:0)

您可以在 c 中从头到尾一次测试每个字符,直到您的两个索引在中间相遇。但是对于 Swift,您不能保证 Swift 字符串中的字符长度相同,它们必须存储由 unicode 字符组成的字符串,目前可以具有 100,000 个字符之一,我认为它们目前通过使用 UTF16 编写字符串来实现这一点。所以你不能仅仅使用偏移逻辑来快速计算一个字符的索引,你必须枚举每个字符,检查每个字符的长度才能到达下一个。由于 NSString 的私有子类的潜力,Objective-C 使这变得更加复杂,每个子类都可以有不同的编码方法。

相关问题