字符串处理 —— 单模式匹配
【问题形式】
- 文本(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):点击这里
字符串处理 —— 单模式匹配相关推荐
- 字符串处理 —— 单模式匹配 —— MP 算法与 KMP 算法
[概述] KMP 是在 MP 算法的基础上改进出来的,两者的核心思想与匹配过程相同,唯一不同的是在于 next 数组的求法,其目的是为了避免 MP 算法中明显失败的匹配. KMP 算法又称 Knuth ...
- 字符串处理 —— 单模式匹配 —— 朴素的字符串匹配算法(BF 算法)
[算法流程] 朴素的字符串匹配算法即暴力匹配算法(BF,Brute Force),其本质是暴力枚举,主要特点有: 没有预处理阶段: 滑动窗口总是后移 1 位: 对模式中的字符的比较顺序不限定,可以从前 ...
- 索引的使用—— 验证索引提升查询效率 || 避免索引失效 —— 全值匹配 /最左前缀法则/范围查询右边的列,不能使用索引/不要在索引列上进行运算操作/字符串不加单引号,造成索引失效
索引的使用 索引是数据库优化最常用也是最重要的手段之一, 通过索引通常可以帮助用户解决大多数的MySQL的性能优化问题 验证索引提升查询效率 查询速度很快,接近0s ,主要的原因是因为id为主键,有索 ...
- javascript中字符串的‘单‘与“双“引号
通常在使用 javascript 进行编码时,您会遇到对字符串使用"单"或"双"引号的情况,并且想知道两者之间是否有任何真正的区别,如果有,使用一个是否有优势其 ...
- sql字符串包含单引号
我们的业务中,数据库需要需要保存前端传过来的富文本,格式是 html,其中就有 css 样式,包含了单引号,比如: <span style="font-family: 'Times N ...
- oracle 中表示字符串使用单引号
oracle中表示字符串使用单引号 调试良久,悲 insert into tablename(field1, field2, ,,) values(value1, value2,,,,); 其中若有字 ...
- Retrofit 2.0 超能实践(三),轻松实现多文件/图片上传/Json字符串/表单
通过前两篇姿势的入门 Retrofit 2.0 超能实践,完美支持Https传输 Retrofit2.0 完美同步Cookie实现免登录 本文出自:http://blog.csdn.net/sk719 ...
- Retrofit 2.0 轻松实现多文件/图片上传/Json字符串/表单
如果嫌麻烦直接可以用我封装好的库:Novate: https://github.com/Tamicer/Novate 通过对Retrofit2.0的前两篇的基础入门和案例实践,掌握了怎么样使用Retr ...
- java 加单引号_【沫沫金】Java逗号拼接字符串增加单引号
背景 页面提供逗号拼接的字符串,可作为数据库查询in的条件. a,b 问题 数据库针对字符串的in条件,要求增加单引号 xx in ('a','b') 需求 页面的逗号拼接字符串直接转换成数据库要求格 ...
最新文章
- Cisco Catalyst 2960系列交换机资料
- 整理大型网站架构必知必会的几个服务器知识
- C# 中的常用正则表达式总结
- Dom4J两种节点添加方法比较
- 马哥linux脚本,linux学习 – shell脚本
- covid 19如何重塑美国科技公司的工作文化
- 【2017年第4期】流式大数据实时处理技术、平台及应用
- Matlab中用到的bsxfun函数
- css/html目录
- bzoj4987: Tree(树形dp)
- 基于VHDL语言分频器电路程序设计
- 市场营销渠道含义是什么?
- 方差递推公式_常见递推公式(数学)
- codeforces 676A Nicholas and Permutation
- 万亿候苹果,1000000000000 美元的海盗公司 | 摸鱼系列
- Java之自动装箱与自动拆箱
- latex添加bibtex参考文献方法及pdf没有参考文献问题
- 计算机蓝屏代码0xc0000020,Win10运行程序提示“损坏的映像 错误0xc0000020”解决方法图文教程...
- idea运行报路径不存在
- Jaeger入门简介
热门文章
- 重磅福利!10本豆瓣平均8.0分技术书免费看!速来!
- 低欲望社会有多可怕?仅94万!日本去年新生人口数创历史新低,空房子如瘟疫般蔓延...
- Simulink之交流调压电路
- Simulink之三相桥式全控整流电路
- python如何安装pdfminer_|请教在python3中安装pdfminer.six的方法
- 数字化转型下的银行云单元架构
- 使用proguard混淆java web项目代码
- jeecg 3.5.2 新版本4种首页风格 【经典风格,shortcut风格,ACE bootstrap风格,云桌面风格】
- ajax之jsonp跨域请求
- hibernate 各种主键生成策略(转)