手机
当前位置:查字典教程网 >编程开发 >Javascript教程 >基于KMP算法JavaScript的实现方法分析
基于KMP算法JavaScript的实现方法分析
摘要:算法的核心是部分匹配表和回退算法,部分匹配表的实现如下:复制代码代码如下:functionkmpGetStrPartMatchValue(s...

算法的核心是部分匹配表和回退算法,部分匹配表的实现如下:

复制代码 代码如下:

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的实现方法分析】相关文章:

使用RequireJS优化JavaScript引用代码的方法

JavaScript实现单击下拉框选择直接跳转页面的方法

Node.js中JavaScript操作MySQL的常用方法整理

JavaScript实现鼠标拖动效果的方法

JavaScript实现将UPC转换成ISBN的方法

Javascript 字符串模板的简单实现

JavaScript获取两个数组交集的方法

在JavaScript中正确引用bind方法的应用

JavaScript里实用的原生API汇总

javascript去除空格方法小结

精品推荐
分类导航