【问题形式】

  • 文本(Text):长度为 n 的数组 T[1..n]
  • 模式(Pattern):一个长度为 m 且 m≤n 的数组 P[1..m]
  • 有效位移/匹配点(Valid Shift):0≤s≤n-m,且 T[s+1..s+m] = P[1..m],即对 1≤j≤m,有 T[s+j] = P[j],则模式 P 在文本 T 中出现且有效位移为 s,且称 s 是匹配点

单模式匹配问题,就是给出一个文本以及一个模式,找出文本中所有的匹配点。

例如:在文本 T=abcabaabcabac 中找出模式 P=abaa 的所有出现

如上图,该模式在此文本中仅出现一次,在位移 s=3 处,即 s=3 是一个匹配点

【算法】

解决字符串匹配的算法有许多,包括:朴素算法(Naive Algorithm)、Rabin-Karp 算法、有限自动机算法(Finite Automation)、 KMP 算法(Knuth-Morris-Pratt Algorithm)等等。

字符串匹配算法通常分为两个步骤:预处理(Preprocessing)、匹配(Matching),所以算法的总时间复杂度为预处理和匹配的时间复杂度的总和。

常见字符串匹配算法的时间复杂度与时间

  • 朴素的字符串匹配算法(Brute Force Algorithm):点击这里
  • KMP 算法(Knuth-Morris-Pratt Algorithm):点击这里

【例题】

  • Blue Jeans(POJ-3080)(暴力匹配+substr()+find()):点击这里
  • Oulipo(POJ-3461)(统计模式串出现次数,可使用重复字符):点击这里
  • 剪花布条(HDU-2087)(统计模式串出现次数,不能使用重复字符):点击这里
  • Power Strings(POJ-2406)(求循环节个数):点击这里
  • Period(POJ-1961)(求字符串前缀循环节个数):点击这里
  • Seek the Name, Seek the Fame(POJ-2752)(求字符串中前缀后缀中存在循环节的子串长度):点击这里
  • Count the string(HDU-3336)(求字符串前缀匹配数之和):点击这里
  • Period II(FZU-1901)(求字符串前缀中存在循环节的子串个数与长度):点击这里
  • Simpsons’ Hidden Talents(HDU-2594)(KMP求字符串前缀为另一字符串后缀):点击这里
  • Cyclic Nacklace(HDU-3746)(补字符使字符串变为循环串):点击这里
  • Carneginon(2019 ACM-ICPC 徐州赛区网络赛 D)(KMP):点击这里
  • string matching(HDU-6629)(扩展KMP):点击这里

字符串处理 —— 单模式匹配相关推荐

  1. 字符串处理 —— 单模式匹配 —— MP 算法与 KMP 算法

    [概述] KMP 是在 MP 算法的基础上改进出来的,两者的核心思想与匹配过程相同,唯一不同的是在于 next 数组的求法,其目的是为了避免 MP 算法中明显失败的匹配. KMP 算法又称 Knuth ...

  2. 字符串处理 —— 单模式匹配 —— 朴素的字符串匹配算法(BF 算法)

    [算法流程] 朴素的字符串匹配算法即暴力匹配算法(BF,Brute Force),其本质是暴力枚举,主要特点有: 没有预处理阶段: 滑动窗口总是后移 1 位: 对模式中的字符的比较顺序不限定,可以从前 ...

  3. 索引的使用—— 验证索引提升查询效率 || 避免索引失效 —— 全值匹配 /最左前缀法则/范围查询右边的列,不能使用索引/不要在索引列上进行运算操作/字符串不加单引号,造成索引失效

    索引的使用 索引是数据库优化最常用也是最重要的手段之一, 通过索引通常可以帮助用户解决大多数的MySQL的性能优化问题 验证索引提升查询效率 查询速度很快,接近0s ,主要的原因是因为id为主键,有索 ...

  4. javascript中字符串的‘单‘与“双“引号

    通常在使用 javascript 进行编码时,您会遇到对字符串使用"单"或"双"引号的情况,并且想知道两者之间是否有任何真正的区别,如果有,使用一个是否有优势其 ...

  5. sql字符串包含单引号

    我们的业务中,数据库需要需要保存前端传过来的富文本,格式是 html,其中就有 css 样式,包含了单引号,比如: <span style="font-family: 'Times N ...

  6. oracle 中表示字符串使用单引号

    oracle中表示字符串使用单引号 调试良久,悲 insert into tablename(field1, field2, ,,) values(value1, value2,,,,); 其中若有字 ...

  7. Retrofit 2.0 超能实践(三),轻松实现多文件/图片上传/Json字符串/表单

    通过前两篇姿势的入门 Retrofit 2.0 超能实践,完美支持Https传输 Retrofit2.0 完美同步Cookie实现免登录 本文出自:http://blog.csdn.net/sk719 ...

  8. Retrofit 2.0 轻松实现多文件/图片上传/Json字符串/表单

    如果嫌麻烦直接可以用我封装好的库:Novate: https://github.com/Tamicer/Novate 通过对Retrofit2.0的前两篇的基础入门和案例实践,掌握了怎么样使用Retr ...

  9. java 加单引号_【沫沫金】Java逗号拼接字符串增加单引号

    背景 页面提供逗号拼接的字符串,可作为数据库查询in的条件. a,b 问题 数据库针对字符串的in条件,要求增加单引号 xx in ('a','b') 需求 页面的逗号拼接字符串直接转换成数据库要求格 ...

最新文章

  1. Cisco Catalyst 2960系列交换机资料
  2. 整理大型网站架构必知必会的几个服务器知识
  3. C# 中的常用正则表达式总结
  4. Dom4J两种节点添加方法比较
  5. 马哥linux脚本,linux学习 – shell脚本
  6. covid 19如何重塑美国科技公司的工作文化
  7. 【2017年第4期】流式大数据实时处理技术、平台及应用
  8. Matlab中用到的bsxfun函数
  9. css/html目录
  10. bzoj4987: Tree(树形dp)
  11. 基于VHDL语言分频器电路程序设计
  12. 市场营销渠道含义是什么?
  13. 方差递推公式_常见递推公式(数学)
  14. codeforces 676A Nicholas and Permutation
  15. 万亿候苹果,1000000000000 美元的海盗公司 | 摸鱼系列
  16. Java之自动装箱与自动拆箱
  17. latex添加bibtex参考文献方法及pdf没有参考文献问题
  18. 计算机蓝屏代码0xc0000020,Win10运行程序提示“损坏的映像 错误0xc0000020”解决方法图文教程...
  19. idea运行报路径不存在
  20. Jaeger入门简介

热门文章

  1. 重磅福利!10本豆瓣平均8.0分技术书免费看!速来!
  2. 低欲望社会有多可怕?仅94万!日本去年新生人口数创历史新低,空房子如瘟疫般蔓延...
  3. Simulink之交流调压电路
  4. Simulink之三相桥式全控整流电路
  5. python如何安装pdfminer_|请教在python3中安装pdfminer.six的方法
  6. 数字化转型下的银行云单元架构
  7. 使用proguard混淆java web项目代码
  8. jeecg 3.5.2 新版本4种首页风格 【经典风格,shortcut风格,ACE bootstrap风格,云桌面风格】
  9. ajax之jsonp跨域请求
  10. hibernate 各种主键生成策略(转)