【译】Swift算法俱乐部-暴力字符串搜索
本文是对 Swift Algorithm Club 翻译的一篇文章。
Swift Algorithm Club是 raywenderlich.com网站出品的用Swift实现算法和数据结构的开源项目,目前在GitHub上有18000+⭐️,我初略统计了一下,大概有一百左右个的算法和数据结构,基本上常见的都包含了,是iOSer学习算法和数据结构不错的资源。
🐙andyRon/swift-algorithm-club-cn是我对Swift Algorithm Club,边学习边翻译的项目。由于能力有限,如发现错误或翻译不妥,请指正,欢迎pull request。也欢迎有兴趣、有时间的小伙伴一起参与翻译和学习🤓。当然也欢迎加⭐️,🤩🤩🤩🤨🤪。
本文的翻译原文和代码可以查看🐙swift-algorithm-club-cn/Brute-Force String Search
暴力字符串搜索(Brute-Force String Search)
如果不允许导入Foundation
并且不能使用NSString
的rangeOfString()
方法,那么如何在纯Swift中编写字符串搜索算法呢?
目标是在String
上实现indexOf(pattern: String)
扩展,返回第一次出现的搜索模式的String.Index
,如果在字符串中找不到模式,则返回nil
。
例子:
注意: 牛的索引是6,而不是你想象的3,因为字符串为表情符号使用更多的存储空间。
String.Index
的实际值并不那么重要,只要它指向字符串中的正确字符。
这是暴力解决方案:
|
|
这将依次查看源字符串中的每个字符。 如果字符等于搜索模式的第一个字符,则内部循环检查模式的其余部分是否匹配,如果未找到匹配项,则外循环将从中断处继续。 重复此过程直到找到完全匹配或到达源字符串的结尾。
暴力方法运行正常,但效率不高(或漂亮)。 不过,暴力方法应该可以在小字符串上正常工作。 对于使用大块文本更好的智能算法,请查看Boyer-Moore字符串搜索。
文章作者 andyron
上次更新 2024-07-16
许可协议 原创文章,如需转载请注明文章作者和出处。谢谢!