Swift 搜索作为搜索字符串前缀的最长字符串的数组
我是一个新的Swift开发者。我使用的是Swift 4.2和Xcode 10.2 我想在数组中搜索一个与搜索字符串相比字符最多的结果。更具体地说,我需要数组中最长的字符串,它是搜索字符串的前缀 例如,如果我的数组是:Swift 搜索作为搜索字符串前缀的最长字符串的数组,swift,string,search,startswith,Swift,String,Search,Startswith,我是一个新的Swift开发者。我使用的是Swift 4.2和Xcode 10.2 我想在数组中搜索一个与搜索字符串相比字符最多的结果。更具体地说,我需要数组中最长的字符串,它是搜索字符串的前缀 例如,如果我的数组是: let array = ["1", "13", "1410", "1649", "1670"] 我的搜索字符串是: let searchString = "16493884777" 我希望结果是“1649” 我找不到另一个可以快速解决的SO问题。您可以从末尾迭代前缀数组(假设前
let array = ["1", "13", "1410", "1649", "1670"]
我的搜索字符串是:
let searchString = "16493884777"
我希望结果是“1649”
我找不到另一个可以快速解决的SO问题。您可以从末尾迭代前缀数组(假设前缀数组已排序),如果找到匹配项,则立即返回,因为该前缀将保证是最长的,因为无法存在另一个相同长度的匹配前缀:
import Foundation
func longestMatchingPrefix(_ prefixArray: [String], _ searchString: String) -> String {
for p in prefixArray.reversed() {
if searchString.hasPrefix(p) {
return p
}
}
return "No matching prefix found"
}
print(longestMatchingPrefix(["1", "13", "1410", "1649", "1670"], "16493884777"))
输出:
1649
您是在查找与搜索字符串具有最多共同字符的条目,还是查找具有最长共同前缀的条目?换句话说:
xxx16493884777
是否符合最佳结果?很抱歉,不够清晰。最长的通用前缀是我需要的。数组将包含唯一的字符串。xxx16493884777不能作为最佳结果。谢谢。这是一个优雅的解决方案。我正在用我的大数组进行测试,但它在操场上运行得很好。longestMatchingPrefix([“1”、“13”、“1410”、“1649”、“1670”]、“164”)
返回“1”而不是“1649”——这是预期的结果吗?是的。这是正确的。因为searchString 164没有9,所以我不想使用该结果。同样,如果我搜索“1200”,我希望返回“1”。@TMLynch:那么您不是在寻找具有最长公共前缀的字符串,而是在寻找作为搜索字符串前缀的最长字符串?也许您应该澄清您的问题(为了本问答的未来读者)。请注意,此解决方案可以简化为prefixArray.reversed()。首先(其中:searchString.hasPrefix)