KMP 字串匹配02

2021-10-05 02:38:20 字數 1002 閱讀 4121

源串s,模式串p,返回源串中包含的模式串的第乙個字元下標

kmp是借用next陣列將字串匹配問題的複雜度由暴力求解法的o(m*n)降為**o(m+n)**的演算法

暴力解法是用兩個指標將模式串與源串字從第乙個字元開始匹配,如果相同匹配下乙個字元,當匹配到乙個不相同的字元時,源串指標回溯到第二個字元再次與模式串第乙個字元進行匹配

kmp演算法只回溯模式串不對源串進行回溯,當匹配到不相同的字元時,只需要從next陣列中得到最長匹配陣列即模式串應該回溯的位置再進行匹配

next陣列的求法

對於模式串p,next[0] = -1;j為模式串中的第幾個字元;k為該字元next中對應的值

如果pj==pk,next[j+1] = k + 1;j++;k++;

否則,k繼續回溯,直到滿足pj==pk或k<0為止;

public

class 字串匹配_kmp

/** * @param s源串

* @param p模式串

* @return

*/private

static

intindexof

(string s,string p)

else

if(j == plen)

}return-1

;}/** * 構造next陣列

* @param ps

* @return

*/private

static

int[

]next

(string ps)

next[1]

=0;int j =1;

int k = next[j]

;//看位置j的最長匹配在**

while

(jelse

}return next;

}}

kmp字串匹配

首先要對模式串進行預處理。預處理過程就是計算出指定位置的字首和字尾的最大相同的長度 啊啊啊啊。估計只有我乙個人能看懂 這個文章說得很清楚 比如說 a a a c b c a a a 0 1 2 0 0 0 1 2 3 void getnext int next,char par 20 int n 翻...

字串匹配 KMP

參考 從頭到尾徹底理解kmp 在字串 str 中 匹配模式串 pattern 1.計算模式串的 next 陣列 2.在字串中匹配模式串 當乙個字元匹配時,str i pattern k 繼續匹配下乙個字元 當當前字元不匹配時,根據 next 陣列移動模式字串,k next k next 陣列 描述模...

KMP字串匹配

判斷s中是否含有字串t。一般思路為 從s中首字元開始,依次與t中進行比對,直到t結尾或者某乙個位置兩者不同 如果到t的結尾,則表示s中含有t。如果有乙個位置不相同,那麼從s中下乙個字元開始,再次與t中字元比對。如下 i 0,j 0 for i len 這樣的比較,每一次遇到不同的時候都需要從t串的第...