字串KMP演算法思考

2022-07-15 21:51:14 字數 719 閱讀 8984

kmp演算法不是查詢最長公共子字串演算法,而是乙個判斷字串a是否包含字串b的更優的查詢演算法。

kmp演算法的核心是next陣列的計算(最長相同字首和字尾的字串)

比如abcdabd的next陣列是-1,0,0,0,0,1,2

kmp演算法查詢邏輯和獲取next陣列的邏輯非常相似,都是while迴圈裡面的if else。

next陣列匹配過程:

/***

/**

* kmp匹配演算法

* * @param sstr 父串

* @param dstr 子串

* @return 子串在父串中下標index[int]

*/public static int find(string sstr, string dstr) else

}//字串匹配結束

if (dindex == dlength)

return -1;

}

查詢包含子字串的匹配過程:

/***

參考文章:

/**

* 獲取next陣列

* * @param deststr 目的字串

* @return next陣列

*/public static int getnextarray2(string deststr) else

}return nextarr;

}

字串 KMP演算法

而kmp演算法在字串匹配方法中乙個很著名並且很聰明的演算法,當然也確實比較難理解。甚至於有程式設計師因為無法理解kmp演算法而直接改用暴力匹配。本身自己學演算法起步較晚,第一次接觸到kmp演算法已經是研究生畢業一年了。雖然帶著研究生的學歷背景,但是剛開始看的時候依然是一臉懵逼。看了很多博主的講解總算...

字串 KMP演算法

而kmp演算法在字串匹配方法中乙個很著名並且很聰明的演算法,當然也確實比較難理解。甚至於有程式設計師因為無法理解kmp演算法而直接改用暴力匹配。本身自己學演算法起步較晚,第一次接觸到kmp演算法已經是研究生畢業一年了。雖然帶著研究生的學歷背景,但是剛開始看的時候依然是一臉懵逼。看了很多博主的講解總算...

字串演算法 KMP演算法

給定字串m和n m比n長 找出n在m中出現的匹配位置。說白了,就是乙個簡單的字串匹配。例如 首先,字串 bbc abcdab abcdabcdabde 的第乙個字元與搜尋詞 abcdabd 的第乙個字元進行比較。因為b與a不匹配,所以搜尋詞後移一位。因為b與a不匹配,搜尋詞再往後移。就這樣,直到字串...