BM算法学习
Posted Tearix
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BM算法学习相关的知识,希望对你有一定的参考价值。
根据阮一峰大大的文章实现,不过没实现“搜索词中的上一次出现位置”(我直接实时查找,显然应该预处理):
文章: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算法学习的主要内容,如果未能解决你的问题,请参考以下文章