题目链接

关于kmp : https://www.cnblogs.com/roccoshi/p/13096988.html

关于kmp, 想了很久, 我觉得不应该放在这里写, 另开一贴记录一下.

#include<bits/stdc++.h>
using namespace std;
typedef long long ll; vector<int> getnext(string s) {
vector<int> next;
next.push_back(-1);
int i = 0, j = -1;
while(i < s.size()) {
if(s[i] == s[j] || j==-1) {
i++;
j++;
next.push_back(j);
}
else {
j = next[j];
}
}
return next;
} vector<int> kmp(string s1, string s2) { // kmp : 找出s2在s1中出现的位置(全部)
vector<int> next = getnext(s2);
vector<int> ans;
int i = 0, j = 0; // i指s1, j指s2
while(i < s1.size()) {
if(s1[i] == s2[j] || j==-1) {
if(j == s2.size()-1) {
ans.push_back(i - j);
j = next[j];
}
else {
i++;
j++;
}
}
else {
j = next[j];
}
}
return ans;
} int main(){
ios::sync_with_stdio(false);
cin.tie(0); string s;
string s1;
cin >> s >> s1;
vector<int> ans = kmp(s,s1);
vector<int> next = getnext(s1);
for (int i = 0; i < ans.size(); ++i) {
cout << ans[i] + 1 << endl;
}
for (int i = 1; i < next.size(); ++i)
{
cout << next[i] << " ";
}
return 0;
}

最新文章

  1. mysql常用函数
  2. LoadRunner 常用C语言函数使用
  3. windows2003批量添加和导出所有ip
  4. 编译mahout0.9
  5. 有关collection中的一些数据结构
  6. ASP.NET Core和ASP.NET Framework共享Identity身份验证
  7. VS插件 热
  8. HTML&amp;CSS基础学习笔记1.2-HTML的全局属性?
  9. Selenium1工作原理
  10. motor和servo
  11. 获取客户端登录ip地址
  12. vs2015第二次装安装不能选择路径问题解决方法
  13. springboot-mybatis多数据源以及踩坑之旅
  14. 新装 Win7 系统装完驱动精灵,一打开到检测界面就卡死——原因与解决方案
  15. Windows核心编程:第11章 Windows线程池
  16. Linux每日小技巧---ss命令
  17. Aqua Data Studio 数据库开发工具
  18. Oracle 11g DRCP连接方式——基本原理
  19. YAML语法介绍
  20. LeetCode 44 Wildcard Matching(字符串匹配问题)

热门文章

  1. Mac打不开inkscape怎么办
  2. kubeadm 搭建kubernetes集群环境
  3. Kubernetes Ingress简单入门
  4. 解决ERROR 1045 (28000): Access denied for user &#39;root&#39;@&#39;localhost&#39; (using password: NO)
  5. 前端基础进阶(六):在chrome开发者工具中观察函数调用栈、作用域链与闭包
  6. 5.Linux的启动过程和系统指令
  7. 【Ubuntu】Ubuntu18.04通过重装系统成功安装显卡驱动
  8. 才华能力出众的ReentrantLock
  9. [Python基础]008.异常
  10. Weblogic 漏洞利用总结