最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于KMP算法JavaScript的實(shí)現(xiàn)方法分析

 更新時(shí)間:2013年05月03日 12:01:40   作者:  
本篇文章介紹了,基于KMP算法JavaScript的實(shí)現(xiàn)方法分析。需要的朋友參考下

算法的核心是部分匹配表和回退算法,部分匹配表的實(shí)現(xiàn)如下:

復(fù)制代碼 代碼如下:

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]


回退算法實(shí)現(xiàn)如下:
復(fù)制代碼 代碼如下:

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

相關(guān)文章

最新評(píng)論

吴旗县| 武功县| 台江县| 铁岭县| 姚安县| 奎屯市| 寻甸| 玉树县| 婺源县| 陕西省| 湄潭县| 石首市| 柘荣县| 长宁区| 吉林市| 浑源县| 平江县| 绥滨县| 三门峡市| 西盟| 阳山县| 永和县| 金门县| 阳江市| 隆安县| 青阳县| 连云港市| 宝应县| 保山市| 济源市| 榆树市| 隆林| 普兰店市| 晴隆县| 南投市| 顺昌县| 西林县| 厦门市| 林州市| 温宿县| 通榆县|