#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. 大数据架构(PB级)

    1.随着互联网快速发展,数据量的快速膨胀,我们日增3000多亿数据量,因此需要针对PB级存储.几百TB的增量数据处理架构设计 2.系统逻辑划分总图: 暂不便透露 3.系统架构图: 4.大数据计算引擎我 ...

  2. List集合转换为数组类型方法

    list集合转换为数组可以使用list集合的toArray(T[] a)方法, topicDetailsVo.setUrl(urls.toArray(new String[]{})); url是个数组 ...

  3. Python之算法模型-5.1

    一.这里学习的算法模型包含监督学习和非监督学习两个方式的算法. 其中监督学习的主要算法分为(分类算法,回归算法),无监督学习(聚类算法),这里的几种算法,主要是学习他们用来做预测的效果和具体的使用方式 ...

  4. vue动态绘制四分之三圆环

    参照网上的一个案例“参照的为绘制的是一个动态的圆环”,现在我的需求是改编成四分之三的圆环实现效果: 样式展示 canvas绘图基本操作设置就可以参考源代码链接:原文:https://blog.csdn ...

  5. Ubuntu安装opencv3.4.4教程

    1 去官网下载opencv 在本教程中选用的是opencv3.4.4,下载链接 http://opencv.org/releases.html ,选择sources. 2 解压 unzip openc ...

  6. Django中ORM多对多表的操作

    自己创建第三张表建立多对多关系 表的创建 # 老师表和学生表可以是一个多对多的关系,建表时可以手动建立第三张表建立关联 class Student(models.Model): name = mode ...

  7. cocos creator按钮点击按钮弹起效果设置方法

    如图所示: 只要设置下button的Transition的属性为Scale即可,参数自己调整下.

  8. 【问题】root账号的UID和GID永远是0吗?

    参考:Does the root account always have UID/GID 0? 这实际上是2个问题 Does the superuser account always have uid ...

  9. Python_字符串相关操作

    1.字符串切片操作: str1='hello word' startIndex=0 #开始索引位置 endIndex=5 #结束索引位置+1 step=2 #步长 print(str1[startIn ...

  10. 【pytorch报错解决】expected input to have 3 channels, but got 1 channels instead

    遇到的问题 数据是png图像的时候,如果用PIL读取图像,获得的是单通道的,不是多通道的.虽然使用opencv读取图片可以获得三通道图像数据,如下: def __getitem__(self, idx ...