Brute-Force(暴力)算法是字符串匹配中最简单也是最容易理解的算法。

主要思想是 按顺序遍历母串,将每个字符作为匹配的起始字符,判断是否匹配字串。若第一个字符与字串匹配,则比较下一个字符,否则回退到母串与字串比较的第一个字符的下个字符,继续比较。

Brute-Force算法的时间复杂度为O(mn).

步骤如图例所示:

(图来自《数据结构》严蔚敏,吴伟民 P80)

我实现的一个例子:

#include <iostream>
#include <string>
using namespace std; int main()
{
string str("ababcabcacbab");
string pattern("abcac"); size_t i=,j=,index=-;
while(i<str.size() && j<pattern.size())
{
if(str[i] == pattern[j])
{
++i;
++j;
}
else
{
i = i - j + ;
j=;
}
if(j == pattern.size())
index = j;
else
index = -;
}
cout << "str: " << str << endl;
cout << "pattern: " << pattern << endl;
cout << "index: " << index << endl;
}

运行结果:

最新文章

  1. html5 canvas常用api总结(一)
  2. MyBatis原理分析之三:初始化(配置文件读取和解析)
  3. 浅析字符串操作方法slice、substr、substring及其IE兼容性
  4. Android小案例——简单图片浏览器
  5. 【转】你需要知道的Python用法
  6. 南桥先生谈《OUTLIERS》
  7. css09浮动属性
  8. 极限挑战—C#+ODP 100万条数据导入Oracle数据库仅用不到1秒
  9. 【ASP.NET Web API教程】2.3.3 创建Admin控制器
  10. poj3417 Network 树形Dp+LCA
  11. MySQL 5.7 基于复制线程SQL_Thread加快恢复的尝试
  12. tiny210 tslib 测试(基于 ft5x06 触摸屏),解决触摸无效问题
  13. David Silver强化学习Lecture2:马尔可夫决策过程
  14. Fiddler 简单介绍
  15. 在maven中classpath notfund
  16. PHP中json_encode中文编码的问题_学习
  17. 网易云信消息抄送服务的第三方接口示例(Java)
  18. C-main函数剖析。
  19. Geometric deep learning on graphs and manifolds using mixture model CNNs
  20. 非洲top10人口大国2017年的人口、预期寿命、三大主粮进口量、92/08/17年的饥饿指数

热门文章

  1. Jquery Uploadify3.21.与2.1版本 使用中存在的问题--记录三
  2. javaScript笔记
  3. CSS3属性 box-shadow 向框添加一个或多个阴影
  4. mailto实现将用户在网页中输入的内容传递到本地邮件客户端
  5. 深入理解JavaScript——闭包
  6. Rafy 框架-发布网页版用户手册
  7. 关于Agile Scrum的笔记
  8. java多线程实现方式
  9. SpringMVC传值、转发、重定向例子
  10. JSON总结(二)——google-gson