BM算法学习
2024-10-08 09:42:37
根据阮一峰大大的文章实现,不过没实现“搜索词中的上一次出现位置”(我直接实时查找,显然应该预处理):
文章: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 -;
}
最新文章
- linux 文件系统结构及命令
- .net实现webservice简单实例分享
- jQuery中attr()、prop()、data()用法及区别
- jquery提交表单,回调函数
- C# 天气预报
- shutdown computer in ad and ou
- 青蛙的约会(POJ 1061 同余方程)
- Docker容器的跨主机连接
- ftpclient卡死问题
- Maven详解(四)------ 常用的Maven命令
- 分析web.xml
- eclipse详细安装教程与环境变量设置
- 利用 awk 统计nginx 中某一个用户的访问次数
- linux下部署jdk+Tomcat
- Docker概念学习系列之为什么使用docker?(3)
- Html5新特性之文档声明和头部信息
- Linux+Redis实战教程_day02_Linux系统上安装MySQL
- Nodejs之mssql模块的封装
- IntelliJ IDEA 历史版本下载地址
- thinkphp 5.0 lnmp环境下 无法访问,报错500(public目录)
热门文章
- LeetCode(2)---路径总和
- springMVC 获取request参数
- JAVA编程中你一定要掌握的“快捷键”
- 面经手册 &#183; 第2篇《数据结构,HashCode为什么使用31作为乘数?》
- Python实现进度条和时间预估的示例代码
- 详解GaussDB(for MySQL)服务:复制策略与可用性分析
- 【av68676164(p21-p22)】线程
- C#LeetCode刷题之#859-亲密字符串​​​​​​​​​​​​​​(Buddy Strings)
- linux下免密登录配置
- three.js 着色器材质内置变量