#include<bits/stdc++.h>
using namespace std;
queue<int> KMP(string a,string b){//a是主串,b是模式串,返回出现位置的下标,如果没有则返回的队列empty()
queue<int> ans;
int i=,j=;//用于比对两个串的下标
int next[b.length()+];//在下标i之前的字符串前后缀相同的最长长度。
next[]=;next[]=;
for(int f=;f<=b.length();f++){//计算next,注意初始化[0]和[1]
while(j>&&b[j]!=b[f-])
j=next[j];
if(b[f-]==b[j])j++;
next[f]=j;
} j=;
int box=;
for(;i<a.length()&&a.length()-i>=b.length()-;i++){//匹配过程
int pointer =i;
for(;;j++){
if(a[pointer]!=b[j]&&j==){//如果通过next回到串头,且串头字符仍然匹配失败,则break使i++
j=;
break;
}else if(a[pointer]!=b[j]){//如果当前字符匹配失败,则通过next到达下一个位置
j=next[j];
i = pointer-;
break;
}else if(b.length()==){//排除特殊情况:字符串长度为1时,匹配成功依然要挪动指针 i
j=;
ans.push(i);
break;
}else if(j==b.length()-){//字符串匹配完成,添加答案到队列,并通过next到达下一个位置
j=next[j];
ans.push(i-box);
box = j;
i=pointer-;
break;
}
pointer++;
}
}
return ans;
} int main(){
string s1,s2;cin>>s1>>s2;
queue<int> que = KMP(s1,s2);
while(!que.empty()){
cout<<que.front()<<" ";
que.pop();
}
}

KMP模板,注释的更多相关文章

  1. 字符串系列——KMP模板整理

    KMP模板整理 KMP与扩展KMP: /*vs 2017/ vs code以外编译器,去掉windows.h头文件和system("pause");*/ #include<i ...

  2. hdu 1686 KMP模板

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

  3. Oulipo HDU 1686 KMP模板

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

  4. KMP模板(bin)

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

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

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

  6. HDU 1711 Number Sequence(KMP模板)

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

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

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

  8. Oulipo----poj3461(kmp模板)

    题目链接:http://poj.org/problem?id=3461 和 减花布条 的题对比一下: 求s2中s1的个数kmp模板: #include<stdio.h> #include& ...

  9. kmp模板 && 扩展kmp模板

    kmp模板: #include <bits/stdc++.h> #define PB push_back #define MP make_pair using namespace std; ...

  10. 六、修改 IntelliJ IDEA 模板注释中的 user 内容

    咱们进一步了解了 IntelliJ IDEA 的个性化设置功能,包括主题和字体的常用设置等,修改后,具体的效果,如下图所示: 观察上图,不知道大家有没有注意到:IntelliJ IDEA 自带模板注释 ...

随机推荐

  1. git config 介绍

    转载. https://blog.csdn.net/liuxiao723846/article/details/83113317 Git的三个重要配置文件分别是/etc/gitconfig,${HOM ...

  2. jquery.marquee

    http://aamirafridi.com/jquery/jquery-marquee-plugin#examples <script src="/plugins/marquee/j ...

  3. 【css】文本效果

    一.字体属性 在css字体样式中常见的字体属性有以下几种 p{ font-size: 50px; /*字体大小*/ line-height: 30px; /*行高*/ font-family: 幼圆, ...

  4. SVN_01概念

    客戶端TortoiseSVN  服务器端VIsualSVN SVN是Apache Subversion的缩写,是一个开放源代码的版本控制系. 这些数据放置在一个中央资料库(repository)中.这 ...

  5. mvc伪静态

    方法一:IIS配置伪静态 方法二:项目配置伪静态 网站配置文件Web.config <system.webServer> <handlers> <add name=&qu ...

  6. Atcoder&CodeForces杂题11.6

    Preface NOIP前突然不知道做什么,感觉思维有点江僵化,就在vjudge上随便组了6道ABC D+CF Div2 C/D做,发现比赛质量还不错,知识点涉及广,难度有梯度,码量稍小,思维较多. ...

  7. linux配置sftp简单过程

    首先疑惑是,  他需要的是上级的目录权限必须为root, 这点我有点不明白 环境是centos7.6 ssh 首先开整/etc/ssh/sshd_config # override default o ...

  8. hive分区理念介绍

    一.背景 1.在Hive Select查询中一般会扫描整个表内容,会消耗很多时间做没必要的工作.有时候只需要扫描表中关心的一部分数据,因此建表时引入了partition概念. 2.分区表指的是在创建表 ...

  9. Shiro安全框架入门使用方法

    详见:https://blog.csdn.net/qq_32651225/article/details/77199464 框架介绍Apache Shiro是一个强大且易用的Java安全框架,执行身份 ...

  10. 在使用pandas获取网上数据报出url错误的解决办法

    在使用pandas.read_csv('网址名')时,出现url错误是,需要在导包出添加一下两句代码 import ssl ssl._create_default_https_context = ss ...