一、KMP算法步驟:
- 用模式串(子串)求出next數(shù)組
- 用next數(shù)組進行字符串匹配
二彭雾、求next數(shù)組:
- next[j]數(shù)組到底是什么呢锁保?
- 數(shù)組的下標(biāo)代表了“已匹配前綴的下一個位置”半沽,元素的值則是“最長可匹配前綴子串的下一個位置”吴菠。
- 當(dāng)模式串中第j個字符發(fā)生不匹配時,應(yīng)從next[j]處的字符開始于主串匹配做葵。
- 如何求next[j]數(shù)組(假設(shè)數(shù)組從1開始存儲)?
next[1]=0(數(shù)組從1開始存儲)
-. 手工求解法重挑,next[j] = j 前面的子串的前部和后部重合長度+1
-. 代碼方法 - 代碼方法求next[j]數(shù)組(假設(shè)數(shù)組從1開始存儲):
- 我們設(shè)置兩個變量i和j棠涮,其中i表示“已匹配前綴的下一個位置/在第i 個字符發(fā)生不匹配刺覆,也是待填充的數(shù)組下標(biāo),j表示“最長可匹配前綴子串的下一個位置”谦屑,也就是待填充的數(shù)組元素值。
2. 具體過程見參考文獻酝枢、數(shù)據(jù)結(jié)構(gòu)書或是活頁本筆記
- 我們設(shè)置兩個變量i和j棠涮,其中i表示“已匹配前綴的下一個位置/在第i 個字符發(fā)生不匹配刺覆,也是待填充的數(shù)組下標(biāo),j表示“最長可匹配前綴子串的下一個位置”谦屑,也就是待填充的數(shù)組元素值。
- 用next數(shù)組進行字符串匹配: