KMP的子串长n,模式串长m,复杂度o(m+n),朴素做法的复杂度o((n-m+1)*m)

觉得大话数据结果上面这个讲得特别好

改进版本的KMP

leetcode

28. Implement strStr()

class Solution {
public: void getnext(string str,int next[])
{
int i=1;
int j=0;
next[1]=0;
int str0=str.length()-1;
while(i<=str0)
{
if(j==0||str[i]==str[j])
{
++j;
++i;
next[i]=j;
}
else
{
j=next[j];
}
} }
int kmp(string s,string t)
{
int cnt=0;
//int *next=new int[1000002];
int next[1000002];
getnext(t,next);
int i=1;
int j=1;
int s0=s.length()-1,t0=t.length()-1;
int idx=-1;
while(i<=s0&&j<=t0)
{
if(j==0||s[i]==t[j])
{
++i;
++j;
}
else
{
j=next[j];
}
if(j>t0)
{
cnt++;
idx=i-t0-1;
break; }
}
return idx;
} int strStr(string haystack, string needle) {
if(haystack.length()==0&&needle.length()<=haystack.length()||needle.length()==0) return 0;
string tmpt="#",tmps="#";
tmpt+=needle;
tmps+=haystack;
return kmp(tmps, tmpt); }
};
class Solution {
public: void getnext(string str,int next[])
{
int i=1;
int j=0;
next[1]=0;
int str0=str.length()-1;
while(i<=str0)
{
if(j==0||str[i]==str[j])
{
++j;
++i;
if(str[i]!=str[j])
next[i]=j;
else
next[i]=next[j];
}
else
{
j=next[j];
}
} }
int kmp(string s,string t)
{
int cnt=0;
//int *next=new int[1000002];
int next[1000002];
getnext(t,next);
int i=1;
int j=1;
int s0=s.length()-1,t0=t.length()-1;
int idx=-1;
while(i<=s0&&j<=t0)
{
if(j==0||s[i]==t[j])
{
++i;
++j;
}
else
{
j=next[j];
}
if(j>t0)
{
cnt++;
idx=i-t0-1;
break; }
}
return idx;
} int strStr(string haystack, string needle) {
if(haystack.length()==0&&needle.length()<=haystack.length()||needle.length()==0) return 0;
string tmpt="#",tmps="#";
tmpt+=needle;
tmps+=haystack;
return kmp(tmps, tmpt); }
};

  

  

acm专题---KMP模板的更多相关文章

  1. kuangbin专题16B(kmp模板)

    题目链接: https://vjudge.net/contest/70325#problem/B 题意: 输出模式串在主串中出现的次数 思路: kmp模板 在 kmp 函数中匹配成功计数加一, 再令 ...

  2. kuangbin专题16A(kmp模板)

    题目链接: https://vjudge.net/contest/70325#problem/A 题意: 有两个数组 a, b, 输出 b 数组在 a 数组中的第一个匹配位置, 不能匹配则输出 -1. ...

  3. HDU 1711 - Number Sequence - [KMP模板题]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1711 Time Limit: 10000/5000 MS (Java/Others) Memory L ...

  4. HDU 1711 Number Sequence(KMP模板)

    http://acm.hdu.edu.cn/showproblem.php?pid=1711 这道题就是一个KMP模板. #include<iostream> #include<cs ...

  5. ACM赛前准备——模板(排版篇)

    ACM赛前准备--模板(排版篇) 更新 前言 效果演示 封面 目录页 模板页(不分栏) 模板页(分栏) 结果文件 快速使用 准备工作 安装TexLive (可选)安装minted包 创建模板 文件结构 ...

  6. 剪花布条---hdu2087(kmp模板)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2087 kmp模板题: #include <cstdio> #include <cst ...

  7. hdu 1686 KMP模板

    // hdu 1686 KMP模板 // 没啥好说的,KMP裸题,这里是MP模板 #include <cstdio> #include <iostream> #include ...

  8. Oulipo HDU 1686 KMP模板

    题目大意:求模式串在主串中的出现次数. 题目思路:KMP模板题 #include<iostream> #include<algorithm> #include<cstri ...

  9. KMP模板(bin)

    KMP模板 主要是kuangbin的模板,之后加了一点我的习惯和理解. kmpN() 作用:构造next数组 参数:模式串,模式串长度 kmpC() 作用:返回模式串在主串中出现的次数(可重复) 参数 ...

随机推荐

  1. 洛谷 P2431 正妹吃月饼 解题报告

    P2431 正妹吃月饼 题目描述 今天是中秋节.\(uim\)带来了一堆大小不同且味道各异的月饼. 这些月饼的质量分别是\(1g\),\(2g\),\(4g\),\(8g\),\(16g\)....后 ...

  2. bzoj3463【COCI2012】 Inspector

    题目描述 在一个小国家中,一个新的小镇终于建成了!如往常一样,Mirko获得了“首席税务巡查员”的职位.他的任务是保证正确地计算各公司的收入情况.一共有N家办公室坐落在主干道上,从左到右被编号为1~N ...

  3. python之旅:并发编程之多进程理论部分

    一 什么是进程 进程:正在进行的一个过程或者说一个任务.而负责执行任务则是cpu. 举例(单核+多道,实现多个进程的并发执行): egon在一个时间段内有很多任务要做:python备课的任务,写书的任 ...

  4. jQuery EasyUI 下拉菜单获取日期,最高年份为当前年份,最低年份为当前年份向前推10年

    http://blog.csdn.net/wangjingjing1014/article/details/16885341 <head><meta http-equiv=" ...

  5. 计数排序与桶排序(bucket sort)

    Bucket Sort is a sorting method that subdivides the given data into various buckets depending on cer ...

  6. Java基础-Date类常用方法介绍

    Java基础-Date类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.毫秒值概念 我们在查阅Date类的API文档时,会发现这样的一句话:"The cl ...

  7. 在MyBatis中,前台传数组批量传id处理数据方式

    <update id = "dishBatchSaleOrDown"> <if test="ids != null"> <if t ...

  8. IOS取消performSelector警告

    #pragma clang diagnostic push #pragma clang diagnostic ignored "-Warc-performSelector-leaks&quo ...

  9. 在VMware安装Ubuntu后一直停留在VMware Easy Install

    在VMware安装Ubuntu完成后,一直停留在VMware Easy Install,可以登录但是没有窗口界面,如图: 在此登录后依次运行以下命令: sudo mv /etc/issue.backu ...

  10. ActiveMQ基本详解与总结& 消息队列-推/拉模式学习 & ActiveMQ及JMS学习

    转自:https://www.cnblogs.com/Survivalist/p/8094069.html ActiveMQ基本详解与总结 基本使用可以参考https://www.cnblogs.co ...