BM算法學習
阿新 • • 發佈:2017-09-18
com 實現 直接 target sea 位置 .html int cnblogs
根據阮一峰大大的文章實現,不過沒實現“搜索詞中的上一次出現位置”(我直接實時查找,顯然應該預處理):
文章:http://www.ruanyifeng.com/blog/2013/05/boyer-moore_string_search_algorithm.html
代碼:
// 偷懶就沒使用預處理的方式 int getLastIndex(int patternIndex, string pattern, char inStrChar) { //在pattern中根據index取得在index前=char的index for (int i = patternIndex-1; i >= 0; --i) { if (pattern[i] == inStrChar) { return i; } } return -1; } int BM(string inStr, string pattern) { int lastIndex = pattern.Length - 1; for (int i = lastIndex; i < inStr.Length; ) {for (int k = 0; k < pattern.Length;) { if (inStr[i-k] == pattern[lastIndex-k]) { k++; if (k == lastIndex) { return i; } }else { int move = lastIndex - k - getLastIndex(lastIndex - k, pattern, inStr[i - k]); i += move; break; } } } return -1; }
BM算法學習