KMP简单应用

Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^

题目描述

给定两个字符串string1和string2,判断string2是否为string1的子串。

输入

 输入包含多组数据,每组测试数据包含两行,第一行代表string1(长度小于1000000),第二行代表string2(长度小于1000000),string1和string2中保证不出现空格。

输出

 对于每组输入数据,若string2是string1的子串,则输出string2在string1中的位置,若不是,输出-1。

示例输入

abc
a
123456
45
abc
ddd
输出:
1
4
-1
模板题
#include <iostream>
#include <cstring>
using namespace std;
char s1[1000000],s2[1000000];
int next[1000000];//不能在函数里面定义局部变量为一百万,可以是10万 有关解析:
//http://www.ljsq.net/read/3c-2b-2b-c8-e7-ba-ce-b6-a8-d2-e5-d2-bb-b8-f6-b3-a4-b6-c8-b3-ac-b9-fd-d2-bb-b0-d9-cd-f2-b5-c4-ca-fd-d7-e9.html
int main()
{//  char s1[1000000],s2[1000000];// int next[1000000];while(cin>>s1){cin>>s2;int k=-1,j=0;next[0]=-1;while(j<strlen(s2)-1){if(k==-1||s2[j]==s2[k]){j++,k++;next[j]=k;}elsek=next[k];}int i=0;j=0;while(j<strlen(s2)&&i<strlen(s1)){if(s1[i]==s2[j]||j==0){i++;j++;}elsej=next[j];}//  cout<<i<<endl;if(j>=strlen(s2))cout<<i+1-strlen(s2)<<endl;elsecout<<"-1"<<endl;}return 0;
}

这个连接是学习中看的关于KMP的讲解:
http://blog.csdn.net/yutianzuijin/article/details/11954939/
http://blog.csdn.net/v_july_v/article/details/7041827
求解kmp next的另一方法:

int getnext()
{int next[maxn];next[0]=-1;next[1]=0;int s=str2.length();int i=2;int cn=0;while(i<s){if(str[i-1]==str[cn]){next[i++]=++cn;}else if(cn>0)//cn>=0cn=next[cn];else next[i++]=0;}
}

sdut2772 KMP的简单应用相关推荐

  1. poj 2406 还是KMP的简单应用

    记住KMP是多计算一位的.其中next[i]为不为自身的最大首尾重复子串长度.        位移j=i-next[i]可以看作是构成字符串s的字串(如果i%j==0,存在这样的构成),相应的重复次数 ...

  2. POJ2406简单KMP

    题意:      给一个字符串,求最大的前缀循环周期,就是最小的循环节对应的最大的那个周期. 思路:      KMP的简单应用,求完next数组后有这样的应用:next[i] :是最大循环节的第几位 ...

  3. 比KMP算法更简单更快的字符串匹配算法

    我想说一句"我日,我讨厌KMP!". KMP虽然经典,但是理解起来极其复杂,好不容易理解好了,便起码来巨麻烦! 老子就是今天图书馆在写了几个小时才勉强写了一个有bug的.效率不高的 ...

  4. hdu3746 KMP的next数组应用,求项链首尾项链循环

    题意:       给你一个项链,问你最少加多少个珠子能满足整个项链是一个循环的项链(首尾相连) 思路:      KMP的简单应用只要了解next数组的意义就好说了,下面总结下  next在循环方面 ...

  5. KMP算法--深入浅出

    说明: 在网上查了各种资料,终于对KMP算法有了透彻的了解,都说KMP特简单,我咋没有察觉呢?难道是智商不在线?或许都是骗纸? 还是进入正题吧,整理整理大佬的blog KMP算法简介: KMP算法是一 ...

  6. UVA5876 Writings on the Wall 扩展KMP

    扩展KMP的简单题. #include<stdio.h> #include<string.h> #define maxn 51010 char s[maxn],t[maxn]; ...

  7. Sunday算法---简单高效的字符串匹配算法

    说到字符串匹配算法,估计大伙立马就想到了KMP算法,谁让KMP这么经典呢,各种算法教材里必然有KMP啊.但是KMP算法太复杂了,求next崩溃到cry.难道就没有比KMP更简单更高效的算法,no,有的 ...

  8. KMP算法真的有这么难吗?(清晰详细版)

    KMP算法我一年之前就接触了,但由于实在难以理解next[]求法故放弃,每次做一次字符串匹配的时候,很多情况下都是暴力解决,除了极个别情况把next[]求法背成模板求解AC. 注意:KMP算法已经成为 ...

  9. Python---哈夫曼树---Huffman Tree

    今天要讲的是天才哈夫曼的哈夫曼编码,这是树形数据结构的一个典型应用. !!!敲黑板!!!哈夫曼树的构建以及编码方式将是我们的学习重点. 老方式,代码+解释,手把手教你Python完成哈夫曼编码的全过程 ...

最新文章

  1. html,css,javascript之间的关系是什么?各是负责哪方面工作的?
  2. 如何在Objective C中声明Block?
  3. Python计算机视觉:第二章 图像局部描述符
  4. 编程之美 set 1 不要被阶乘吓倒
  5. 使用 OpenLDAP 集中管理用户帐号
  6. C++ 语法都不会怎么写代码? 03
  7. bzoj1925地精部落——数学
  8. MapReduce InputFormat之FileInputFormat
  9. windows操作系统,python环境下django的自动安装
  10. 设计自己的基于Selenium 的自动化测试框架-Java版(3) - 给框架分分层
  11. 关于JAVA自带MD5的方法
  12. [轉]VS 2010 通过 Architecture创建UML类图设计
  13. sql与ORACLE链接服务器相互访问方法
  14. 翻译: 3.2. 从零开始实现线性回归 深入神经网络 pytorch
  15. PRML学习总结(1)——Introduction
  16. 微信小程序标签样式的优先级
  17. GIS开发必备的地理坐标系知识
  18. Java教师工资习题
  19. java pdf文件转换图片,pdf文件转图片(java实现)
  20. 海域重力场与垂直基准产品构建及质量评估系统

热门文章

  1. android启动---lk入口文件crt0.s解析
  2. unet图片数据增强_numpy实现深度学习遥感图像语义分割数据增强(支持多波段)
  3. 使用Flutter之后,我们的CPU占用率降了50%
  4. 第58件事 借势文案创作实例
  5. 事件绑定及解除事件绑定
  6. Mac 环境下连接多个git — ssh方式
  7. 阿里云服务器如何加强服务器的安全?有哪些安全措施?
  8. 【J2EE之web应用】java集群概念
  9. 消除数组中重复元素的方法
  10. 测试人员面临的测试挑战和必备技能