KMP演算法初探

2021-10-05 13:34:53 字數 554 閱讀 1656

/// /// 求出乙個字串的next陣列

///

/// 字串

/// next陣列

static int getnextarray(string t)

else

next[j] = 0; //當k==-1 跳出迴圈是,next[j] = 0, 否則next[j]會在break之前被賦值}}

return next;

}

/// /// 對主串s和模式串t進行kmp模式匹配

///

/// 主串/param>

/// 模式串

/// 若匹配成功,返回t在s中的位置(第乙個相同字元對應的位置),若匹配失敗,返回-1

public static int kmpmatch(string s, string t)

else

j = next[j];

}if (j == t.length)

else

return -1;

}

KMP演算法初探

edit by xingoo kmp演算法其實就是一種改進的字串匹配演算法。複雜度可以達到o n m n是參考字串長度,m是匹配字串長度。傳統的演算法,就是匹配字串與參考字串挨個比較,如果相同就比較下乙個,如果不相同,就返回上一次的結果,再重新比較。如圖1 如果失敗則字串會重新用s 參考字串 的第二...

初探KMP演算法之next nextval

這種演算法是d.e.knuth與v.r.pratt和j.h.morris同時發現的,因此人們稱它為克努特 莫里斯 普拉特演算法 簡稱為kmp演算法 此演算法可以在o m n 的時間數量級上完成串的模式匹配操作。其改進在於 每當一趟匹配過程中出現字元比較不等時,不需要回溯 i 指標,而是利用已經得到的...

演算法 KMP演算法

kmp演算法主要解決的問題就是在字串 主串 中的模式 pattern 定位問題。記主串為t,模式串為p,則kmp演算法就是返回p在t 現的具體位置,如果沒有出現則返回 1。如果 i 指標指向的字元和 j 指標指向的字元不一致,那麼把 i 右移1位,j 從0位開始,從新開始匹配 如果 i 指標指向的字...