字符串   abcd abc abcd abc

匹配串   cdabcd

匹配串的 next  0 0 0 0 1 2;

开始匹配

abcd abc abcd abc

cd abc d

a,d 匹配失败

next 数组进行移动

abcd abc abcd abcd

c dabcd

再次匹配

模板

这个算法有些问题(尚未找到修改方法)

#include<bits/stdc++.h>
using namespace std;
;
];
//  next 数组首位为  0
int KMP(string ss,string tt)
{
    nt[]=;
    ,k=;p<tt.size();p++)
    {
         && tt[k]!=tt[p])
            k=tt[k-];
        if(tt[k]==tt[p])
            k++;
        nt[p]=k;
    }  // 构建 next 数组
    ,k=;p<ss.size();p++)
    {
        && ss[p]!=tt[k])
            k=tt[k-];
        if(ss[p]==tt[k])
            k++;
        if(k==tt.size())
        {
            cout<<<<"   "<<p<<endl;
            ;
        }
    }
    ;
}
int main()
{
    string ss,tt;
    cin>>ss>>tt;
    cout<<KMP(ss,tt)<<endl;
}

next[0]=-1;

#include<iostream>
#include<string.h>
#include<stdio.h>
using namespace std;
];
];
];
int KMP()
{
    int s=strlen(ss);  // ss
    int t=strlen(tt);
    nt[]=-;
    ;
    ,j=-;i<s;)
    {
        ||ss[i]==ss[j])
        {
            i++; j++;
            nt[i]=j; // next[1]=0;
        }
        else
            j=nt[j];
    }
    //for(int i=0;i<s;i++)
    //cout<<nt[i]<<endl;
    ,j=;i<t;)
    {
        ||ss[j]==tt[i])
        {
            i++; j++;
        }
        else j=nt[j];
        if(j==s)
        {
            num++;
            j=;
        }

    }
    return num;

}
int main()
{

    ]!='#')
    {
        scanf("%s",ss);
        cout<<KMP()<<endl;
    }
}

KMP算法自我理解 和 模板的更多相关文章

  1. 自己对kmp算法的理解,借由 28. 实现 strStr() 为例

    做题思路 or 感想 : 就借由这道题来理解一下kmp算法吧 kmp算法的操作过程我觉得有句话很合适 :KMP 算法永不回退 目标字符串 的指针 i,不走回头路(不会重复扫描 目标字符串),而是借助 ...

  2. KMP算法,匹配字符串模板(返回下标)

    //KMP算法,匹配字符串模板 void getNext(int[] next, String t) { int n = next.length; for (int i = 1, j = 0; i & ...

  3. KMP算法 --- 深入理解next数组

    在KMP算法中有个数组,叫做前缀数组,也有的叫next数组. 每一个子串有一个固定的next数组,它记录着字符串匹配过程中失配情况下可以向前多跳几个字符. 当然它描述的也是子串的对称程度,程度越高,值 ...

  4. KMP算法的理解

    ---恢复内容开始--- 在看数据结构的串的讲解的时候,讲到了KMP算法——一个经典的字符串匹配的算法,具体背景自行百度之,是一个很牛的图灵奖得主和他的学生提出的. 一开始看算法的时候很困惑,但是算法 ...

  5. 关于《数据结构》课本KMP算法的理解

    数据结构课上讲的KMP算法和我在ACM中学习的KMP算法是有区别的,这里我对课本上的KMP算法给出我的一些想法. 原理和之前的KMP是一样的https://www.cnblogs.com/wkfvaw ...

  6. 关于KMP算法的理解

    上次因为haipz组织的比赛中有道题必须用到KMP算法,因此赛后便了解了下它,在仔细拜读了孤~影神牛的文章之后有种茅塞顿开的感觉,再次ORZ. 附上链接http://www.cnblogs.com/y ...

  7. 我对KMP算法的理解

    KMP算法的核心在于失配回溯表——pnext,相比于通过逐个比较来匹配字符串的朴素算法,KMP通过对模式串的分析,可以做到比较指针在主串上不回溯,一直向前. 1. KMP如何实现不回溯? 对于主串 t ...

  8. AC自动机自我理解和模板

    给出长度为m的文本 查询 n个单词出现的次数 用kmp 复杂度 n*m*(单词平均长度) 用字典树 复杂度 m*每次字典树遍历的平均深度) AC自动机 复杂度 m (思路可以理解为kmp+字典树 ) ...

  9. 第十一章 串 (c3)KMP算法:理解next[]表

随机推荐

  1. xadmin后台导出时gunicorn报错ascii

    django + xadmin + nginx + gunicorn部署后,xadmin后台导出model数据报错,gunicorn日志记录为:UnicodeEncodeError: 'ascii' ...

  2. while循环以及格式化输出总结

    while循环: while 无限循环 count = 1 sum = 0 while True: sum = sum + count count = count + 1 if count == 10 ...

  3. python ----字符串基础练习题30道

    1.执行python脚本的两种方式 一种是点开始--运行--cmd 方式(这个操作需要先配置好环境变量path路径)之后运行python 二是直接进安装目录 运行tython软件运行.pycharm ...

  4. Android : iperf-2.0.4 网络测试工具

    一.源码下载及交叉编译: 下载:https://pan.baidu.com/s/1i6NYDF3   //包含linux和windows上的可执行文件 1. 解压后获得perf-2.0.4源码.2. ...

  5. SQL-30 使用子查询的方式找出属于Action分类的所有电影对应的title,description

    题目描述 film表 字段 说明 film_id 电影id title 电影名称 description 电影描述信息 CREATE TABLE IF NOT EXISTS film ( film_i ...

  6. FPGA构造spi时序——AD7176为例(转)

    reference:https://blog.csdn.net/fzhykx/article/details/79490330 项目中用到了一种常见的低速接口(spi),于是整理了一下关于spi相关的 ...

  7. 第六节 静态的(static)和单例模式

    main函数 主函数是一个特殊的函数,作为程序的入口,可以被jvm(虚拟器)调用 主函数的定义 public 表示该函数的访问权限是最大的. static 代表主函数随着类的加载就已经存在了. voi ...

  8. 使用keytool生成公钥、私钥、证书并且读取出来,使用私钥签名jar并验证(转)

    参考链接:http://happyqing.iteye.com/blog/2139504 :https://blog.csdn.net/arjelarxfc/article/details/52461 ...

  9. Python如何操作redis

    做UI自动化时,遇到一个问题,需要在后台操作完成后,产生结果才能在前端进行操作,但是用自动化在后台操作又很麻烦,就想直接操作数据库,然后再 在前端进行操作:这时遇到一个问题,在后台操作时,会写入到数据 ...

  10. Oracle触发器报错

    Oracle编写触发器时,执行时候报错,错误提示信息如上图所示,类似这种一般都是触发器语句有语法错误.重新审核语句,并再次执行. 如果用的是pl/sql developer的话,可以查看当前用户下的对 ...