基于KMP算法JavaScript的实现方法分析
2013-05-03 00:00
756 查看
算法的核心是部分匹配表和回退算法,部分匹配表的实现如下:
回退算法实现如下:
function kmpGetStrPartMatchValue(str) { var prefix = []; var suffix = []; var partMatch = []; for(var i=0,j=str.length;i<j;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; } } } prefix.length = 0; suffix.length = 0; return partMatch; } //demo var t="ABCDABD"; console.log(kmpGetStrPartMatchValue(t)); //output:[0,0,0,0,1,2,0]
回退算法实现如下:
function KMP(sourceStr,targetStr){ var partMatchValue = kmpGetStrPartMatchValue(targetStr); var result = false; for(var i=0,j=sourceStr.length;i<j;i++){ for(var m=0,n=targetStr.length;m<n;m++){ if(str.charAt(m) == sourceStr.charAt(i)){ if(m == targetStr.length-1){ result = true; break; } else { i++; } } else { if(m>0 && partMatchValue[m-1] > 0){ m = partMatchValue[m-1]-1; } else { break; } } } if(result){ break; } } return result; } var s = "BBC ABCDAB ABCDABCDABDE"; var t = "ABCDABD"; console.log(KMP(s,t)); //output: true
相关文章推荐
- 基于KMP算法JavaScript的实现方法分析
- JavaScript面向对象继承原理与实现方法分析
- 基于Javascript实现文件实时加载进度的方法
- JavaScript实现快速排序的方法分析
- CSS和JavaScript以及Ajax实现预加载图片的方法及优缺点分析
- javascript多物体运动实现方法分析
- JavaScript基于setTimeout实现计数的方法
- thinkPHP基于反射实现钩子的方法分析
- 基于JavaScript实现 获取鼠标点击位置坐标的方法
- JavaScript基于自定义函数判断变量类型的实现方法
- JavaScript实现设置默认日期范围为最近40天的方法分析
- 图片滚动特效实现方法的分析(JavaScript)
- JavaScript 异步方法队列链实现代码分析
- javascript另类方法实现htmlencode()与htmldecode()函数实例分析
- JavaScript实现浅拷贝与深拷贝的方法分析
- 基于JavaScript实现继承机制之构造函数方法对象冒充的使用详解
- javascript另类方法实现htmlencode()与htmldecode()函数实例分析
- 基于JavaScript实现继承机制之调用call()与apply()的方法详解
- 基于JavaScript实现继承机制之调用call()与apply()的方法详解
- JavaScript基于Dom操作实现查找、修改HTML元素的内容及属性的方法