根据阮一峰大大的文章实现,不过没实现“搜索词中的上一次出现位置”(我直接实时查找,显然应该预处理):

文章: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-; i >= ; --i)
{
if (pattern[i] == inStrChar)
{
return i;
}
}
return -;
} int BM(string inStr, string pattern)
{
int lastIndex = pattern.Length - ;
for (int i = lastIndex; i < inStr.Length; )
{
for (int k = ; 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. linux 文件系统结构及命令
  2. .net实现webservice简单实例分享
  3. jQuery中attr()、prop()、data()用法及区别
  4. jquery提交表单,回调函数
  5. C# 天气预报
  6. shutdown computer in ad and ou
  7. 青蛙的约会(POJ 1061 同余方程)
  8. Docker容器的跨主机连接
  9. ftpclient卡死问题
  10. Maven详解(四)------ 常用的Maven命令
  11. 分析web.xml
  12. eclipse详细安装教程与环境变量设置
  13. 利用 awk 统计nginx 中某一个用户的访问次数
  14. linux下部署jdk+Tomcat
  15. Docker概念学习系列之为什么使用docker?(3)
  16. Html5新特性之文档声明和头部信息
  17. Linux+Redis实战教程_day02_Linux系统上安装MySQL
  18. Nodejs之mssql模块的封装
  19. IntelliJ IDEA 历史版本下载地址
  20. thinkphp 5.0 lnmp环境下 无法访问,报错500(public目录)

热门文章

  1. LeetCode(2)---路径总和
  2. springMVC 获取request参数
  3. JAVA编程中你一定要掌握的“快捷键”
  4. 面经手册 &#183; 第2篇《数据结构,HashCode为什么使用31作为乘数?》
  5. Python实现进度条和时间预估的示例代码
  6. 详解GaussDB(for MySQL)服务:复制策略与可用性分析
  7. 【av68676164(p21-p22)】线程
  8. C#LeetCode刷题之#859-亲密字符串​​​​​​​​​​​​​​(Buddy Strings)
  9. linux下免密登录配置
  10. three.js 着色器材质内置变量