1. 程式人生 > >BM算法學習

BM算法學習

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算法學習