KMP 演算法 java實現

2021-09-01 08:35:35 字數 658 閱讀 4275

在網上找到的**執行出來的模式值和資料裡根據定義計算出來的值不一樣, 沒有找到合適的,於是手寫了乙個。

模式值定義:

(1)next[0]= -1  意義:任何串的第乙個字元的模式值規定為-1。

(2)next[j]= -1   意義:模式串t中下標為j的字元,如果與首字元相同,且j的前面的1—k個字元與開頭的1—k個字元不等(或者相等但t[k]==t[j])(1≤k取next 模式值的**如下:

/**

* 獲取模式值陣列

* @param str

* @return

*/public int nextmodel(string str)

return arrays; }

/*** 計算模式值

* @param index 索引值

* @return 當前索引位置的模式值

*/private int getnextmodelval(string str,int index)

int result = 0;

if(index>1)

}result=k;

break;

}if(result==0)else

}}

return result;

}

Java實現KMP演算法

對於查詢字元子串在父字串中出現的位置,我們可以使用kmp演算法。kmp演算法的實現原理是使子串向右滑盡可能的遠,這就涉及到求滑動距離的陣列next.next陣列中每個元素求解的公式是 private static void kmpnext int next,string str 這裡需要附加說明的是...

kmp演算法 java實現

通常我們想在乙個字串中匹配乙個子字串,會遍歷字串,對於每乙個字元,都遍歷子字串進行匹配,這樣時間複雜度為o nm 使用kmp演算法只需先進行乙個o m 的預處理 生成next陣列 就能將搜尋的時間複雜度降低至o n m 下面講一講kmp演算法的實現原理。對於abcdeabd.和abcdeabc,當匹...

KMP演算法(java實現)

kmp演算法是由donald kunth vaughan pratt james h.morris三個人發明的,是一種複雜度很小的匹配字串的演算法。給定兩個字串str和match,長度分別為n和m。實現乙個演算法,如果字串str中含有子串match,則返回match在str中的開始位置,不含有則返回...