基于KMP算法JavaScript的实现方法分析


Posted in Javascript onMay 03, 2013

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

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
Javascript 相关文章推荐
网页图片延时加载的js代码
Apr 22 Javascript
jQuery 工具函数学习资料
Apr 29 Javascript
Javascript将string类型转换int类型
Dec 09 Javascript
javascript禁制后退键(Backspace)实例代码
Nov 15 Javascript
使用C++为node.js写扩展模块
Apr 22 Javascript
jquery.fastLiveFilter.js实现输入自动过滤的方法
Aug 11 Javascript
jQuery Validate初步体验(一)
Dec 12 Javascript
Javascript字符串常用方法详解
Jul 21 Javascript
小程序指纹验证的实现代码
Dec 04 Javascript
如何解决vue在ios微信&quot;复制链接&quot;功能问题
Mar 26 Javascript
Vue如何基于vue-i18n实现多国语言兼容
Jul 17 Javascript
JS前端轻量fabric.js系列之画布初始化
Aug 05 Javascript
JS动态获取当前时间,并写到特定的区域
May 03 #Javascript
JS实现商品倒计时实现代码
May 03 #Javascript
Javascript代码在页面加载时的执行顺序介绍
May 03 #Javascript
为什么要在引入的css或者js文件后面加参数的详细讲解
May 03 #Javascript
javascript两种function的定义介绍及区别说明
May 02 #Javascript
阻止子元素继承父元素事件具体思路及实现
May 02 #Javascript
jquery 触发a链接点击事件解决方案
May 02 #Javascript
You might like
【COS正片】蕾姆睡衣cos,纯洁可爱被治愈了 cn名濑弥七
2020/03/02 日漫
php的chr和ord函数实现字符加减乘除运算实现代码
2011/12/05 PHP
mac系统下安装多个php并自由切换的方法详解
2017/04/21 PHP
PHP 7安装调试工具Xdebug扩展的方法教程
2017/06/17 PHP
Laravel 创建指定表 migrate的例子
2019/10/09 PHP
超强的IE背景图片闪烁(抖动)的解决办法
2007/09/09 Javascript
JavaScript中圆括号()和方括号[]的特殊用法疑问解答
2013/08/06 Javascript
JS实现鼠标单击与双击事件共存
2014/03/08 Javascript
json的定义、标准格式及json字符串检验
2014/05/11 Javascript
JS实现仿苹果底部任务栏菜单效果代码
2015/08/28 Javascript
Angular.js如何从PHP读取后台数据
2016/03/24 Javascript
jQuery实现的简单百分比进度条效果示例
2016/08/01 Javascript
jQuery插件FusionCharts实现的Marimekko图效果示例【附demo源码】
2017/03/24 jQuery
JS如何设置元素样式的方法示例
2017/08/28 Javascript
Vue header组件开发详解
2018/01/26 Javascript
Vue下拉框回显并默认选中随机问题
2018/09/06 Javascript
小程序实现左滑删除功能
2018/10/30 Javascript
Three.JS实现三维场景
2018/12/30 Javascript
javascript 函数的暂停和恢复实例详解
2020/04/25 Javascript
Vue实现简单购物车功能
2020/12/13 Vue.js
python 提取文件的小程序
2009/07/29 Python
Python中的自定义函数学习笔记
2014/09/23 Python
python获取从命令行输入数字的方法
2015/04/29 Python
python正则表达式re之compile函数解析
2017/10/25 Python
IntelliJ IDEA安装运行python插件方法
2018/12/10 Python
Python实现的逻辑回归算法示例【附测试csv文件下载】
2018/12/28 Python
Python XML转Json之XML2Dict的使用方法
2019/01/15 Python
django中使用POST方法获取POST数据
2019/08/20 Python
西铁城美国官方网站:Citizen Watch美国
2019/11/08 全球购物
新员工培训个人的自我评价
2013/10/09 职场文书
公司门卫的岗位职责
2014/02/19 职场文书
部队万能检讨书
2014/02/20 职场文书
品质主管岗位职责
2014/03/16 职场文书
大学班级文化建设方案
2014/05/06 职场文书
预备党员学习十八届三中全会精神思想汇报
2014/09/13 职场文书
毕业论文致谢怎么写
2015/05/14 职场文书