首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
SAAS
ToB门户
了解全球最新的ToB事件
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
微博
Follow
记录
Doing
博客
Blog
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
排行榜
Ranklist
相册
Album
应用中心
qidao123.com ToB IT社区-企服评测·应用市场
»
论坛
›
虚拟化.超融合.云计算
›
公有云
›
SAAS
›
洛谷P3375 【模板】KMP
返回列表
发新帖
洛谷P3375 【模板】KMP
[复制链接]
发表于
3 小时前
|
显示全部楼层
|
阅读模式
P3375 【模板】KMP
这题有很多多少讲法,我的不肯定清晰,只管讲吧
什么是KMP算法?
所谓的
KMP
,就是在
主串
中快速地找出
模式串
的位置
这里我们必要一个fail数组,此中fail
的意思是
模式串前i个字符的前缀的最长公共前后缀
接下来我会拿图来表明:
此时开始遍历每一个字符,直到......
下一个字符不匹配!!!!!
那咋办?
如果重新开始重新遍历,时间复杂度将会大爆炸......
那有没有更快的方法?有的,就是
KMP
:
由于fail数组存的是模式串的
前i个字符构成的前缀的最长公共前后缀
,
那么拿此图来讲,模式串中字符d的前面
肯定是跟主串一样
,
那么显然的,
赤色部门
与
黄色部门
是完全相当的,此时我们就可以偷懒了,
将指针j调到fail[j]继承匹配。
为什么跳到fail[j]?
fail[j]表现的是
最长公共前后缀
,就是
赤色部门的长度
!!
以是我们的指针跳到fail[j],
注:也可以明确为讲模式串的第fail[j]位跳到j的位置
:
那么不停遍历到竣事......
发现全部都符合,于是我们找到了答案。
标题剖析
此标题中的border就是
fail数组的每个值
(不表明)
以是我们在举行查找过后,直接输出fail数组的值就好了
其他的依照上述的KMP解说写就好了
绝对不是我懒得写剖析
ACcode:
[code]//实在剖析在这里(doge)#includeusing namespace std;const int N=1e6+5;int f[N];//f
:模式串t的前i-1个字符的最长雷同前后缀长度int main(){ ios::sync_with_stdio(false); cin.tie(0); string s,t; cin>>s>>t; for(int i=2;i
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
×
回复
使用道具
举报
返回列表
浏览过的版块
数据仓库与分析
公有云
CRM
东湖之滨
+ 我要发帖
登录后关闭弹窗
登录参与点评抽奖 加入IT实名职场社区
去登录
微信订阅号
微信服务号
微信客服(加群)
H5
小程序
快速回复
返回顶部
返回列表