swift查找给定子字符串的所有位置朴素字符串匹配、KMP字符串匹配...

swift查找给定子字符串的所有位置朴素字符串匹配、KMP字符串匹配...

2023年7月20日发(作者:)

swift查找给定⼦字符串的所有位置朴素字符串匹配、KMP字符串匹配思路:使⽤朴素字符串搜索,依次扫描整个字符串/// 查找所有的⼦字符串所在位置/// - Parameter string: 给定的模式Pfunc findAllIndex(_ string:String) -> [NSRange]{ var ranges:[NSRange] = [] if tsEqual(""){ return ranges } let zero = ndex let target = Array(string) let total = Array(self)

let lenght = var startPoint = 0

while >= startPoint + { if total[startPoint] == target[0]{ let startIndex = (zero, offsetBy: startPoint) let endIndex = (startIndex, offsetBy: lenght) let child = self[startIndex..

return ranges}使⽤KMP算法实现:/// KMP字符串查询/// - Parameter p: 查询的模式func kmpFindAllIndex(_ p:String) -> [NSRange]{ var ranges:[NSRange] = [] let n = let m = let π = computePrefix(p) var q = 0

for i in 0.. 0 && !racter(q).elementsEqual(racter(i)){ q = π[q] }

if racter(q).elementsEqual(racter(i)){ q += 1 }

if q == m{ ((location: i, length: m)) q = π[q] } } return ranges}/// 计算KMP对应的前缀函数π数组/// - Parameter p: 模式Pfunc computePrefix(_ p:String) -> [Int]{ let m = var π:[Int] = [Int](repeatElement(0, count: m + 1)) π[0] = 0 var k = 0 for q in 1.. 0 && !racter(k).elementsEqual(racter(q)){ k = π[k] } if racter(k).elementsEqual(racter(q)){ k += 1 } π[q] = k }

return π}/// 获取单个字符/// - Parameter index: <#index description#>func getCharacter(_ index:Int) -> String{ return getChildsString(index, 1)}/// 获取特定位置,长度 字符串/// - Parameters:/// - start: 开始位置/// - length: 长度func getChildsString(_ start:Int,_ length:Int) -> String{ let startIndex = (ndex, offsetBy: start) let endIndex = (startIndex, offsetBy: length) return String(self[startIndex..

发布者:admin,转转请注明出处:http://www.yc00.com/news/1689848503a290301.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信