自学kmp算法:

first time:wa

#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
using namespace std;
const int maxn=+;
char s1[maxn],s2[maxn];
int next[maxn],n,m;
int main()
{
scanf("%s%s",s1+,s2+);
n=strlen(s1+);m=strlen(s2+);
next[]=;
for(int i=;i<=m;++i){//1~j的前后缀最大值
if(i==)printf("!");
int j=next[i-];
printf("j%d ",j);
while( s1[i]!=s2[j+] && j ){j=next[j];printf("j%d ",j);}
if(s1[i]==s2[j+])j++;
printf("final:%d\n",j);
next[i]=j; // printf("next[%d]%d ",i,next[i]);
}
int j=;
for(int i=;i<=n;i++){//i未匹配,j已匹配
while(s1[i]!=s2[j+] && j)j=next[j];
if(s1[i]==s2[j+])j++;
if(j==m){
printf("%d\n",i-m+);
j=next[j];
}
}
for(int i=;i<=m;i++){
// printf("%d ",next[i]);
}
return ;
}
/*
ababababababbbabbbabbbababababb
abbbabaabbbabbb
*/
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
using namespace std;
const int maxn=+;
char s1[maxn],s2[maxn];
int next[maxn],n,m;
int main()
{
scanf("%s%s",s1+,s2+);
n=strlen(s1+);m=strlen(s2+);
next[]=;
for(int i=;i<=m;++i){//1~j的前后缀最大值
//if(i==3)printf("!");
int j=next[i-];
//printf("j%d ",j);
while( s2[i]!=s2[j+] && j )j=next[j];//printf("j%d ",j);}
if(s2[i]==s2[j+])j++;
//printf("final:%d\n",j);
next[i]=j; // printf("next[%d]%d ",i,next[i]);
}
int j=;
for(int i=;i<=n;i++){//i未匹配,j已匹配
while(s1[i]!=s2[j+] && j)j=next[j];
if(s1[i]==s2[j+])j++;
if(j==m){
printf("%d\n",i-m+);
j=next[j];
}
}
for(int i=;i<=m;i++){
printf("%d ",next[i]);
}
return ;
}
易错点分析:
kmp算法的基本思想就是
利用最长前后缀
减少重复匹配次数
预处理模式串时,自己与自己匹配,主串不参与
还有就是:循环中变量的意义不要混淆,
比如next[i]->模式串中1~i子串的最大前后缀,所以包括字母s2[i]
while( __!=__ && )注意下标
...

kmp算法:的更多相关文章

  1. 数据结构--KMP算法总结

    数据结构—KMP KMP算法用于解决两个字符串匹配的问题,但更多的时候用到的是next数组的含义,用到next数组的时候,大多是题目跟前后缀有关的 . 首先介绍KMP算法:(假定next数组已经学会, ...

  2. 实验数据结构——KMP算法Test.ming

    翻译计划     小明初学者C++,它确定了四个算术.关系运算符.逻辑运算.颂值操作.输入输出.使用简单的选择和循环结构.但他的英语不是很好,记住太多的保留字,他利用汉语拼音的保留字,小屋C++,发明 ...

  3. 数据结构——KMP算法

    算法介绍 KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特—莫里斯—普拉特操作(简称KMP算法).KMP算法的核心是利用 ...

  4. 数据结构-kmp算法

    定义 改进字符串的匹配算法 关键:通过实现一个包含了模式串的局部匹配信息的next()函数,利用匹配失败的信息,减少匹配次数. 1.BF算法 暴力匹配 给定 文本串S "BBC ABCDAB ...

  5. <数据结构>KMP算法

    next数组 定义 严格定义:next[i]表示使子串s[0...k] == s[i-k...i]的最大的k(前后缀可以重叠,但不能是s[0..i]本身) 含义:最长相等前后缀的下标,没有则赋-1 图 ...

  6. 大话数据结构——KMP算法(还存在问题)

    http://www.ruanyifeng.com/blog/2013/05/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm.html /*#include& ...

  7. 数据结构KMP算法中手算next数组

    总结一下今天的收获(以王道数据结构书上的为例子,虽然我没看它上面的...):其中竖着的一列值是模式串前缀和后缀最长公共前缀. 最后求得的结果符合书上的结果,如果是以-1开头的话就不需要再加1,如果是以 ...

  8. 数据结构- 串的模式匹配算法:BF和 KMP算法

      数据结构- 串的模式匹配算法:BF和 KMP算法  Brute-Force算法的思想 1.BF(Brute-Force)算法 Brute-Force算法的基本思想是: 1) 从目标串s 的第一个字 ...

  9. 数据结构与算法--KMP算法查找子字符串

    数据结构与算法--KMP算法查找子字符串 部分内容和图片来自这三篇文章: 这篇文章.这篇文章.还有这篇他们写得非常棒.结合他们的解释和自己的理解,完成了本文. 上一节介绍了暴力法查找子字符串,同时也发 ...

  10. 【数据结构】KMP算法

    我还是不太懂... 转2篇大神的解释    1>https://www.cnblogs.com/yjiyjige/p/3263858.html     2>https://blog.csd ...

随机推荐

  1. Docke--基础篇

    什么是Docker? Docker 最初是dotCloud公司创始人Solomon Hykes在法国期间发起的一个公司内部项目,它是基于dotCloud公司多年云服务技术的一次革新,并与2013年3月 ...

  2. chrome主页篡改解决方法

    网上有一个超级细致的小白教学连接,但是发现很难找到,分享一下:https://arlenluo.github.io./2017/03/12/DefeatYourBrowser 还有一种情况是要打开 & ...

  3. nacos作为配置中心

    分布式配置中心 在微服务架构中,为什么需要一个统一的配置中心呢?如果用一句话来说那就是方便管理,降低出错的可能.比如:你开发环境是一套配置,测试环境是一套,生产环境又是一套.你如果手动去修改,难免会出 ...

  4. Python并发编程之多线程使用

    目录 一 开启线程的两种方式 二 在一个进程下开启多个线程与在一个进程下开启多个子进程的区别 三 练习 四 线程相关的其他方法 五 守护线程 六 Python GIL(Global Interpret ...

  5. 第七周博客作业<西北师范大学|李晓婷>

    1.助教博客链接:https://home.cnblogs.com/u/lxt-/ 2.本周应批作业0,实批作业0. 3.本周小结:本周我们助教开始准备团队项目题目,下周三之前将会进行作业提交.

  6. localhost,127.x.x.x和 0.0.0.0区别

    之前遇到过一件很纳闷的事,明明用webpack-dev-server监听了一个端口xx,用localhost:xx可以打开,但是依然可以在localhost:xx来启动另一个服务. 后来我看来了下we ...

  7. netcore项目在Windows部署:使用NSSM部署Windows服务

    NSSM部署Windows服务 1 准备工作 在Windows平台部署Asp.net core应用程序一般采用IIS,但是如果我们的net core应用执行的是定时任务,需要开机自启,稳定运行的话,使 ...

  8. Mac 上 Apache Apollo 的安装与运行,和官方下载文件中 Python 实例的演示

    前不久我在 Mac 上成功安装了 mosquitto,这次我又试了试安装另一个热门的 broker —— Apache Apollo.对在 Mac 上安装 mosquitto 感兴趣的可以点击查看我的 ...

  9. Nuxt.js笔记

    前置知识 SSR服务器渲染 Vue SSR(server side rendering)服务端渲染 和 Vue SPA(single page application)单页应用 Vue SSR-> ...

  10. Swagger Edit 安装和使用教程

    Swagger Edit介绍Swagger是专门用来管理接口一个工具.在开发过程中,接口一直是纷争的聚焦点,能有效管理接口(保存好记录.及时更新.方便查看.接口测试).会让整个项目开发效率提升很大. ...