KMP算法学习笔记(一)
来源:互联网 发布:女装从淘宝进货可以吗 编辑:程序博客网 时间:2024/06/04 19:44
参考原出处:http://www.cnblogs.com/aaronjs/p/4225442.html
var str1 = "BBC ABCDAB ABCDABCDABDE"; var str2 = "ABCDABD"; var xx = this.KMP(str1, str2);kmpGetStrPartMatchValue: function(str){ var prefix = []; var suffix = []; var partMatch = []; var _len = str.length for(var i = 0; i < _len; i++){ var newStr = str.substring(0,i+1); if(newStr.length == 1){ partMatch[i] = 0; }else{ for(var k = 0; k < i; k++){ //取前缀 prefix[k] = newStr.slice(0, k+1); suffix[k] = newStr.slice(-k - 1); if(prefix[k] == suffix[k]){ partMatch[i] = prefix[k].length; } } if(!partMatch[i]){ partMatch[i] = 0; } } } return partMatch; }, KMP: function(sourceStr, searchStr){ //生成匹配表 var part = this.kmpGetStrPartMatchValue(searchStr); var sourceLen = sourceStr.length; var searchLen = searchStr.length; var result; var i = 0, j = 0; for(; i < sourceLen; i++){ //最外层循环,主串 //子循环 for(var j = 0; j < searchLen; j++){ //如果与主串匹配 if(searchStr.charAt(j) == sourceStr.charAt(i)){ //如果是匹配完成 if(j == searchLen - 1 ){ result = i - j; break; }else{ //如果匹配到了就继续循环,i++是用来增加主串的下标位 i++; } }else{ //在子串的匹配中i是被叠加了 if(j > 1 && part[j - 1] > 0){ i += (i - j - part[j - 1]); }else{ //移动一位 i = i - j; } break; } } if(result || result == 0){ break; } } if(result || result == 0){ return result; }else{ return -1; } }
0 0
- KMP算法学习笔记(一)
- KMP算法学习笔记
- 学习笔记-KMP算法
- KMP算法 学习笔记
- Kmp算法学习笔记
- KMP算法学习笔记
- KMP算法学习笔记
- KMP算法学习笔记
- KMP算法学习笔记
- KMP算法学习笔记
- 学习笔记-KMP算法
- KMP算法学习笔记
- KMP算法学习笔记
- KMP算法学习笔记
- KMP算法学习笔记
- KMP算法:学习笔记
- 字符串单模板匹配学习笔记(一)kmp算法
- KMP匹配算法学习笔记
- Puppet使用方法总结
- iOS面试必看,最全梳理
- 安装SQLserver的注意事项
- 安卓与js交互
- C# 在excel中查找及替换数据
- KMP算法学习笔记(一)
- 【MySQL解惑】索引简介
- linux下read/write编程
- MySql各种优化
- linux sed 批量替换字符串
- mybatis自动生成映射文件
- 关于linux 下fcntl()函数的介绍
- VC 获取系统特殊文件夹的路径如:系统目录,桌面等
- 【Python】redis sentinel主从切换(failover)