KMP入门 博客推荐+模板+入门习题

KMP入门

入门介绍

KMP入门博客推荐

next数组讲解

模板代码

//这个是对next进行的优化
void getnext()               //做的第一步是获得next【】的值
{
    int i=0,k=-1;
    next[0]=-1;
    while(i<lenb)
    {
        if(k==-1 || str[i]==str[k])
        {
            i++; k++;
            if(t[i]==t[k])
                next[i]=next[k];
            else next[i]=k;
        }
        else k=next[k];
    }
}
//没有带优化的部分
void getnext()               //做的第一步是获得next【】的值
{
    int i=0,k=-1;
    next[0]=-1;
    while(i<lenb)
    {
        if (k==-1 || b[i]==b[k])
            next[++i]=++k;
        else k=next[k];
    }
}
int KMP()
{
    getnext();
    int i=0,j=0,cnt=0;
    while (i<lena)
    {
        if (j==-1||a[i]==b[j])
        {
            i++;j++;
        }
        else j=next[j];
        if (j==lenb)
        {
            cnt++; //记录一共有多少个匹配的字符串
            printf("%d\n", i-j+1); //输出匹配的位置,从1开始的。
            j=next[j];//接下来继续匹配
        }
    }
    return cnt;
}

完整的代码,这个代码对应的题目为洛谷P3375

#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=1e6+7;
char a[maxn],b[maxn];
int next[maxn];
int lena, lenb;
void getnext()               //做的第一步是获得next【】的值
{
    int i=0,k=-1;
    next[0]=-1;
    while(i<lenb)
    {
        if (k==-1 || b[i]==b[k])
            next[++i]=++k;
        else k=next[k];
    }
}
void KMP()
{
    getnext();
    int i=0,j=0,cnt=0;
    while (i<lena)
    {
        if (j==-1||a[i]==b[j])
        {
            i++;j++;
        }
        else j=next[j];
        if (j==lenb)
        {
            printf("%d\n", i-j+1);
            j=next[j];
        }
    }
}
int main()
{
    while(scanf("%s",a)!=EOF)
    {
        scanf("%s",b);
        lena=strlen(a);
        lenb=strlen(b);
        KMP();
        for(int i=1; i<=lenb; i++)//这里是从1开始的,而不是从0开始,因为next数组中第一个位置的-1
            //实际上只是个界限,没有其他作用,实际next数组是从1开始的。
        {
            printf("%d ", next[i]);
        }
        printf("\n");
    }
    return 0;
}

原文地址:https://www.cnblogs.com/alking1001/p/12243172.html

时间: 2024-10-10 21:52:33

KMP入门 博客推荐+模板+入门习题的相关文章

单调栈算法 入门+博客推荐+模板

单调栈算法 入门+博客推荐+模板 博客推荐 用法及作用:https://www.cnblogs.com/lher/p/7620330.html 简介 首先需要明确定义:1.单调递增的栈,2.单调递减的栈 单调递增的栈:从栈顶到栈底是递增的,每次压进去的数要小于栈顶元素,输出也是单调递增的,主要是解决最大值的区间问题: 单调递减的栈:从栈顶到栈底是递减的,每次压进去的数要大于栈顶元素,输出也是单调递减的,主要是解决最小值的区间问题: 这里的单调性是否严格,要根据实际情况来做决定. 在一个数列中,单

我的Android进阶之旅------&gt;经典的大牛博客推荐(排名不分先后)!!

本文来自:http://blog.csdn.net/ouyang_peng/article/details/11358405 今天看到一篇文章,收藏了很多大牛的博客,在这里分享一下 谦虚的天下 柳志超博客 Android中文Wiki AndroidStudio-NDK开发-移动开发团队谦虚的天下 - 博客园gundumw100博客 - android进阶分类文章列表 - ITeye技术网站CSDN博文精选:Android系列开发博客资源汇总 - CSDN.NET - CSDN资讯Android笔

cnBlogs博客推荐

数据结构和算法若可以称为为编程的细胞结构,那设计模式就是编程的灵魂气脉. 一个从是编程的微观演绎,一个是编程的宏观设计.这个从技术和艺术的结合体,毫无疑问是在世界末日之前的很伟大的一项发明. 设计模式书籍推荐:                  <设计模式 可复用面向对象软件的基础>:将可重用面向对象的设计模型分为创造类.结构类 .行为类三种进行详述.            <软件秘笈──设计模式那点事> :模式实现通过Eclipse中的Java 工程展开,采用软件编程诠释设计模式

分享3一个博客HTML5模板

1.材类别:半透明 博客html模板 个人博客 半透明html5博客主题,半透明,博客,博客html模板,个人博客,html5,灰色,半透明html5博客主题是一款适合用于个人博客主题,风格非常不错. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveHNxZHM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" > 半透明html5博客主题 2.素材

Bootstrap3实现的响应式幻灯滑动效果个人作品集/博客网站模板

在线演示 本地下载 相关的开发和使用说明,请参考如下课程: Bootstrap3开发滑动风格的博客网站模板

nodejs环境 + 入门 + 博客搭建

NodeJS:NodeJS是一个使用了Google高性能V8 引擎 的服务器端JavaScript实现.它提供了一个(几乎)完全非阻塞I/O栈,与JavaScript提供的闭包和匿名函数相结合,使之成为编写高吞吐 量网络服务程序的优秀平台. NPM:全称是Node Package Manager,是一个NodeJS定制的包管理和分发工具,如node-mysql,已经成为了非官方的发布Node模块(包)的标准. (npm类似maven,package.json类似pom.xml文件) mongod

完整Android开发基础入门博客专栏

博客地址:http://www.runoob.com/w3cnote/android-tutorial-contents.html

物联网博客推荐:网昱多媒体

这个网站有很多关于Arduino入门的东西,同时这个博客的作者也是知名Arduino入门图书(算是吧)<完美图解Arduino互动设计入门>(台湾版<超圖解Arduino互動設計>)的作者,该图书受到Arduino官方的推荐.目前大陆上最新版为第二版,第三版现已面世,但是只有繁体中文版(作者是台湾人) <完美图解Arduino互动设计入门>第二版链接:https://detail.tmall.com/item.htm?spm=a230r.1.14.29.1f77156c

我看过的好博客推荐(javaScript+Css)

1.JavaScript秘密花园 很不错的一篇博客,讲了许多javaScript常用到的需要注意的问题,比较透彻,推荐~~ 2.经验分享:CSS浮动(float,clear)通俗讲解 http://www.cnblogs.com/lizijie/p/4046938.html http://www.iyunlu.com/view/css-xhtml/55.html http://www.cnblogs.com/polk6/archive/2013/07/25/3142187.html有些乱,有空整