KMP算法的JS实现

talk is cheap,show me the code:

function kmpGetStrPartMatchValue(str) {
    var prefix = [];
    var suffix = [];
    var partMatch = [];
    for(var i=0;i<str.length;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;
}
function KMP(sourceStr,targetStr){
    var partMatchValue = kmpGetStrPartMatchValue(targetStr);
    var result = false;
    for(var i=0;i<sourceStr.length;i++){
        for(var m=0;m<targetStr.length;m++){
            if(targetStr.charAt(m) == sourceStr.charAt(i)){
                if(m == targetStr.length-1){
                    result = i-m;
                    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 ABCDABDDABDE";
var t = "ABCDABD";
console.log(kmpGetStrPartMatchValue(t));//[0, 0, 0, 0, 1, 2, 0]
console.log(KMP(s,t));//11

参考链接:

阮一峰-字符串匹配的KMP算法
[KMP算法的JavaScript实现
]

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 最近接受了一个新的需求,希望制作一个基于微信的英语语音评价页面。即点击录音按钮,用户录音说出预设的英文,根据用户的...
    ReeCode阅读 9,213评论 7 15
  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi阅读 7,424评论 0 10
  • **2014真题Directions:Read the following text. Choose the be...
    又是夜半惊坐起阅读 9,811评论 0 23
  • 特别鸣谢: 参考文章:http://blog.csdn.net/zoucharming/article/detai...
    lqeh阅读 18,832评论 4 24
  • 巍巍泰山,五岳之首。去年的某个周末我和朋友一起去了泰山,从此拥有了某种力量。 山水之乐,在乎心境,也讲究...
    金拉拉阅读 272评论 0 0