gpt4 book ai didi

swift - 对字符串进行排序以确定它是 Swift Xcode 中的 Anagram 还是 Palindrome

转载 作者:可可西里 更新时间:2023-11-01 02:02:19 24 4
gpt4 key购买 nike

我有一个名为 String 的扩展名,其中有两个函数名为 isAnagramOf 和 isPalindrome。第一个函数应该将输入作为字符串,然后首先它将空格替换为没有空格,然后对字符串进行排序和比较并返回一个 bool 值以确定是否是变位词。第二个函数名为 isPalindrome,它也会忽略空格和大写,然后它会反转 String 并比较如果反转则返回。

我是 swift 的新手,正在学习教程,但无论我如何尝试编写它,我都会不断收到这些错误。我现在已经经历了至少 10 次,但无法正常工作

如果有人可以帮助编写这段代码,那将是很棒的,我也愿意接受向我展示另一种编写方式的人。也许首先作为数组然后对字符串进行排序,但我不确定。

extension String {
func isAnagramOf(_ s: String) -> Bool {
let lowerSelf = self.lowercased().replacingOccurrences(of: " ", with: "")
let lowerOther = s.lowercased().replacingOccurrences(of: " ", with: "")
return lowerSelf.sorted() == lowerOther.sorted() // first error:Value of type 'String' has no member 'sorted
}

func isPalindrome() -> Bool {
let f = self.lowercased().replacingOccurrences(of: " ", with: "")
let s = String(describing: f.reversed()) //second error:Value of type 'String' has no member 'reversed'
return f == s
}
}

最佳答案

Swift 3 中,String 本身不是集合​​,因此您必须排序或反转其字符 View :

extension String {
func isAnagramOf(_ s: String) -> Bool {
let lowerSelf = self.lowercased().replacingOccurrences(of: " ", with: "")
let lowerOther = s.lowercased().replacingOccurrences(of: " ", with: "")
return lowerSelf.characters.sorted() == lowerOther.characters.sorted()
}

func isPalindrome() -> Bool {
let f = self.lowercased().replacingOccurrences(of: " ", with: "")
return f == String(f.characters.reversed())
}
}

检查回文的一种稍微更有效的方法是

extension String {
func isPalindrome() -> Bool {
let f = self.lowercased().replacingOccurrences(of: " ", with: "")
return !zip(f.characters, f.characters.reversed()).contains(where: { $0 != $1 })
}
}

因为没有创建新的 String,并且函数“短路”,即一旦发现不匹配就返回。

Swift 4 中,String 是其字符的集合,并且代码简化为

extension String {
func isAnagramOf(_ s: String) -> Bool {
let lowerSelf = self.lowercased().replacingOccurrences(of: " ", with: "")
let lowerOther = s.lowercased().replacingOccurrences(of: " ", with: "")
return lowerSelf.sorted() == lowerOther.sorted()
}

func isPalindrome() -> Bool {
let f = self.lowercased().replacingOccurrences(of: " ", with: "")
return !zip(f, f.reversed()).contains(where: { $0 != $1 })
}
}

还要注意

let f = self.lowercased().replacingOccurrences(of: " ", with: "")

返回删除了所有 空格 字符的字符串。如果你想删除所有空格(空格,制表符,换行符,......)然后使用例如

let f = self.lowercased().replacingOccurrences(of: "\\s", with: "", options: .regularExpression)

关于swift - 对字符串进行排序以确定它是 Swift Xcode 中的 Anagram 还是 Palindrome,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45469045/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com