字符串   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. shell 变量介绍

    变量命名规则 变量名必须以字母或下划线开头,名字中间只能由字母,数字和下划线组成,大小写是区分的 变量名的长度不得超过255个字符 变量名在有效的范围内必须是唯一的 在Bash中,变量的默认类型都是字 ...

  2. Win10系列:VC++调用自定义组件1

    通过20.9.1小节中的代码和步骤编写了一个名为"FilePickerComponent"的WinRT组件,接下来将在上一小节所新建的项目基础上,继续介绍如何在不同的语言所编写的应 ...

  3. weblogic相关

    来源:http://zhidao.baidu.com/link?url=gqPaYovGiEHYPPPyI6PgPV6THVLr4nlj3CGCjY3mwm0-ERUnfuQz614ywAwYLnP6 ...

  4. day18-python的正则表达式

    1. 正则表达式基础 1.1. 简单介绍 正则表达式并不是Python的一部分.正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十 ...

  5. [HDU2475]Box

    Problem 先告诉你每个盒子在哪个盒子的内部 接下来有M个操作: 可以把一个盒子及里面的盒子移到另外一个盒子的内部 或者询问你某个盒子最外面的盒子是哪个 Solution 首先可以建成一个图,然后 ...

  6. 锤子科技 Smartisan M1L 咖啡金 真皮背面 高配版 5.7

    http://www.smartisan.com/m1/#/os    快人一步的OS http://www.smartisan.com/shop/#/buyphone?c=coffee&v= ...

  7. linux生成SSH key

    1. 检查SSH keys是否存在 ls -al ~/.ssh2. 生成新的ssh key 输入 ssh-keygen -t rsa -C your_email@example.com

  8. java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result异常的解决方法

    今天在写一个JAVA程序的时候出现了异常:java.lang.ArithmeticException: Non-terminating decimal expansion; no exact repr ...

  9. 1040 有几个PAT

    字符串 APPAPT 中包含了两个单词 PAT,其中第一个 PAT 是第 2 位(P),第 4 位(A),第 6 位(T):第二个 PAT 是第 3 位(P),第 4 位(A),第 6 位(T). 现 ...

  10. DOS debug 命令的详细用法

    DOS下的DEBUG命令的详细用法       2 推荐 名称 解释 格式 a (Assemble) 逐行汇编 a [address] c (Compare) 比较两内存块 c range addre ...