KMP算法的JS實(shí)現(xiàn)

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實(shí)現(xiàn)
]

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末掩驱,一起剝皮案震驚了整個(gè)濱河市降淮,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌哲思,老刑警劉巖洼畅,帶你破解...
    沈念sama閱讀 217,734評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異棚赔,居然都是意外死亡帝簇,警方通過查閱死者的電腦和手機(jī)徘郭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來丧肴,“玉大人残揉,你說我怎么就攤上這事∮蟾。” “怎么了抱环?”我有些...
    開封第一講書人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)纸巷。 經(jīng)常有香客問我镇草,道長(zhǎng),這世上最難降的妖魔是什么瘤旨? 我笑而不...
    開封第一講書人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任梯啤,我火速辦了婚禮,結(jié)果婚禮上存哲,老公的妹妹穿的比我還像新娘条辟。我一直安慰自己,他們只是感情好宏胯,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著本姥,像睡著了一般肩袍。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上婚惫,一...
    開封第一講書人閱讀 51,462評(píng)論 1 302
  • 那天氛赐,我揣著相機(jī)與錄音,去河邊找鬼先舷。 笑死艰管,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蒋川。 我是一名探鬼主播牲芋,決...
    沈念sama閱讀 40,262評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼捺球!你這毒婦竟也來了缸浦?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤氮兵,失蹤者是張志新(化名)和其女友劉穎裂逐,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體泣栈,經(jīng)...
    沈念sama閱讀 45,587評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡卜高,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評(píng)論 3 336
  • 正文 我和宋清朗相戀三年弥姻,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片掺涛。...
    茶點(diǎn)故事閱讀 39,919評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡庭敦,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出鸽照,到底是詐尸還是另有隱情螺捐,我是刑警寧澤,帶...
    沈念sama閱讀 35,635評(píng)論 5 345
  • 正文 年R本政府宣布矮燎,位于F島的核電站定血,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏诞外。R本人自食惡果不足惜澜沟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望峡谊。 院中可真熱鬧茫虽,春花似錦、人聲如沸既们。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)啥纸。三九已至号杏,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間斯棒,已是汗流浹背盾致。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留荣暮,地道東北人庭惜。 一個(gè)月前我還...
    沈念sama閱讀 48,048評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像穗酥,于是被迫代替她去往敵國(guó)和親护赊。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 最近接受了一個(gè)新的需求砾跃,希望制作一個(gè)基于微信的英語(yǔ)語(yǔ)音評(píng)價(jià)頁(yè)面百揭。即點(diǎn)擊錄音按鈕,用戶錄音說出預(yù)設(shè)的英文蜓席,根據(jù)用戶的...
    ReeCode閱讀 9,126評(píng)論 7 15
  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi閱讀 7,331評(píng)論 0 10
  • **2014真題Directions:Read the following text. Choose the be...
    又是夜半驚坐起閱讀 9,497評(píng)論 0 23
  • 特別鳴謝: 參考文章:http://blog.csdn.net/zoucharming/article/detai...
    lqeh閱讀 18,667評(píng)論 4 24
  • 巍巍泰山器一,五岳之首。去年的某個(gè)周末我和朋友一起去了泰山厨内,從此擁有了某種力量祈秕。 山水之樂渺贤,在乎心境,也講究...
    金拉拉閱讀 245評(píng)論 0 0