lua实现KMP算法
来源:互联网 发布:淘宝合伙开店协议 编辑:程序博客网 时间:2024/05/16 09:45
如下,有误,请指出,谢谢
function KmpHelperFun(str) local next= {} --i:模版字符串下标 next[1] = 0; -- 第一个字符对应的最大前后缀长度为0 local k = 0 --初始化最大前后缀长度为0 for i = 2,# str do --从第二个字符开始,依次计算每一个字符对应的next值 while( k > 0 and (str[i] ~= str[k+1]) ) do --算法核心 k = next[k] end --相等的话最大前后缀长度+1,否则赋值为0 if str[i] == str[k+1] then --保存此次最大前后缀长度,保存在数组中和保存在k中给下个字符使用 k = k + 1 next[i] = k else k = 0 next[i] = k end end return nextendfunction Str2CharTable(str) local t = {} for chr in string.gmatch(str, ".") do t[#t+1] = chr end return tend function KmpFind(srcStr,findStr) local t ={} t = KmpHelperFun(findStr) local indexSrcStr, indexFindStr = 1,1 while ( indexSrcStr <= #srcStr and indexFindStr <= #findStr ) do if srcStr[indexSrcStr] == findStr[indexFindStr] then indexSrcStr = indexSrcStr +1 indexFindStr = indexFindStr+1 else --第一位不匹配,主字符指针后移 if indexFindStr == 1 then indexSrcStr = indexSrcStr +1 else --最长前后缀之后的第 1 位 indexFindStr = t [indexFindStr -1 ] + 1 end end end if indexFindStr > #findStr then return indexSrcStr - indexFindStr + 1,indexSrcStr -1 else return -1,-1 end end local srcStr,findStr srcStr,findStr = Str2CharTable("annbcdanacadsannacanna"),Str2CharTable("annacanna") local startPos,endPos = KmpFind(srcStr,findStr) print(startPos,endPos)
0 0
- lua实现KMP算法
- lua实现KMP字符串匹配。
- KMP算法及改进KMP算法实现
- [数据结构]KMP算法实现
- KMP算法的实现
- KMP算法实现
- KMP算法实现
- KMP 算法实现
- kmp算法实现
- KMP算法实现
- KMP算法和实现
- KMP算法实现
- KMP算法及实现
- KMP算法的实现
- KMP算法实现
- java实现kmp算法
- KMP算法C++实现
- KMP算法c++实现
- 终于开通了自己的学习记录博客
- spark配置:spark集群
- Android为 ContentProvider 提供了那些服务内容?
- unity3d面片全屏
- SVG的viewBox
- lua实现KMP算法
- Gradle for Android 系列:初识 Gradle 文件
- [iOS] 使用WebViewJavascriptBridge实现OC与JS交互
- 欢迎使用CSDN-markdown编辑器
- VBox下的CentOS挂载共享文件夹
- 免费的优秀工具推荐!!
- Android开发——四大组件之BroadcastReceiver概念
- zk--preface(57)
- Unity Animation采样和自定义属性