字符串_KMP算法(求next[]模板 hdu 1711)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1711
问题描述:给两个序列a,b,长度分别为n,m(1<=n<=1000000,1<=m<=10000),问序列b是否为序列a的子序列,若是:返回a中最左边的与b相等的子序列的首元素下标;若不是,输出-1。
目的:方便以后查看KMP算法中next[]的模板
Number Sequence
Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 12811 Accepted Submission(s): 5815
代码实现:
1 #include "stdio.h" 2 #include "string.h" 3 #define N 10005 4 5 int next[N]; 6 int a[100*N],b[N]; 7 8 void KMP(int *s,int len,int *next) //求next[]模板 9 { 10 int i,j; 11 i = 0; 12 j = next[0] = -1; 13 while(i<len) 14 { 15 while(j!=-1 && s[i]!=s[j]) 16 j = next[j]; 17 next[++i] = ++j; 18 } 19 } 20 21 int main() 22 { 23 int T; 24 int i,j; 25 int n,m; 26 scanf("%d",&T); 27 while(T--) 28 { 29 scanf("%d %d",&n,&m); 30 for(i=0; i<n; i++) scanf("%d",&a[i]); 31 for(i=0; i<m; i++) scanf("%d",&b[i]); 32 KMP(b,m,next); 33 i=j=0; 34 while(i<n) 35 { 36 while(j!=-1 && a[i]!=b[j]) 37 j = next[j]; 38 i++,j++; 39 if(j==m) break; 40 } 41 if(j==m) printf("%d\n",i-j+1); //题中数据是从下标为1开始的,故加1 42 else printf("-1\n"); 43 } 44 return 0; 45 }
转载于:https://www.cnblogs.com/ruo-yu/p/4414062.html
字符串_KMP算法(求next[]模板 hdu 1711)相关推荐
- 算法分类整理+模板②:字符串处理
本周训练赛出了一道kmp模板题,但是由于长时间没有复习字符串处理算法,而且学习时也并没有彻底理解,只是大概明白了思路,所以导致比赛时迟迟没有做出这一题,最后现场拿出学校整理的材料现场重新学习才ac的这 ...
- KMP算法 hdu 1711 hdu 2203
mark一下,重新温习了 KMP KMP复杂度O(n+m) 这里有一个解释的超级的好的博客,大家可以去看一下:http://blog.csdn.net/v_july_v/article/details ...
- 有n 个长为m+1 的字符串,求前后m个字符匹配所能形成的最长字符串链:利用弗洛伊德算法求最长路径...
有n 个长为m+1 的字符串,如果某个字符串的最后m 个字符与某个字符串的前m 个字符匹配,则两个字符串可以联接,问这n 个字符串最多可以连成一个多长的字符串,如果出现循环,则返回错误. 把字符串看成 ...
- Tarjan 算法思想求强连通分量及求割点模板(超详细图解)
割点定义 在一个无向图中,如果有一个顶点,删除这个顶点及其相关联的边后,图的连通分量增多,就称该点是割点,该点构成的集合就是割点集合.简单来说就是去掉该点后其所在的连通图不再连通,则该点称为割点. 若 ...
- hdu 4160 Dolls 匈牙利算法求最大匹配
Dolls Time Limit: 2000 ...
- 线性求逆元模板_ZXBlog/ACM模板(C++).md at bb6f2522054d5370df79222461293721e8edede2 · cw1027/ZXBlog · GitHub...
ACM模板(C++) 1.大数 加法,乘法模板 //题目链接 : http://poj.org/problem?id=2506 //题目大意 : 就是问你用2*1,1*2,2*2的砖拼成2*n的长方形 ...
- 字符串-Manacher算法(你知道马拉车算法吗?)
文章目录 原理 奇偶问题 p[]数组 马拉车求p[] 模板 例题 P3805 [模板]manacher算法 P1659 拉拉队排练 原理 马拉车算法当然不是马拉着车的奇奇怪怪的东西,是Manacher ...
- 算法提高课-图论-有向图的强连通分量-AcWing 1174. 受欢迎的牛:tarjan算法求强连通分量、tarjan算法板子、强连通图
文章目录 题目解答 题目来源 题目解答 来源:acwing 分析: 强连通图:给定一张有向图.若对于图中任意两个结点x,y,既存在从x到y的路径,也存在从y到x的路径,则称该有向图是"强连通 ...
- CSP认证201412-4 最优灌溉[C++题解]:最小生成树裸题、Kruskal算法求最小生成树
题目分析 来源:acwing 分析:这是一道最小生成树的裸题. 这里默写Kruskal求最小生成树的最小费用的模板. 最小生成树模板请参考笔者的另一篇博文: 最小生成树板子-AcWing 859. K ...
- Algorithm:C++语言实现之字符串相关算法(字符串的循环左移、字符串的全排列、带有同个字符的全排列、串匹配问题的BF算法和KMP算法)
Algorithm:C++语言实现之字符串相关算法(字符串的循环左移.字符串的全排列.带有同个字符的全排列.串匹配问题的BF算法和KMP算法) 目录 一.字符串的算法 1.字符串的循环左移 2.字符串 ...
最新文章
- 医疗卫生信息化 医学信息 医疗信息化 医院管理 资料下载
- netty 对 protobuf 协议的解码与包装探究(2)
- union--求集合的并集
- Android API Level对应Android版本一览表
- JEPaas代码_((列表)输入字段值而计算
- 如何在README中使用图片
- 兔子--百度地图所需的jar+so下载地址
- Oracle11 startup报错,oracle11g 启动报错 缺少系统参数
- python数据如何保存到excel中
- SHLVL 和 BASH_SUBSHELL 两个变量的区别
- python获取cpu信息_使用python获取CPU和内存信息的思路与实现(linux系统)
- Transact-SQL 语法约定
- 服务器位置设置,服务器部署位置
- SQL语句学习1——SHOW命令
- vb读取mysql数据库数据_VB读取ORACLE数据库的两种方法
- PS 模糊图片背景(滤镜)
- 10种常用数据分析方法
- windows下桌面便签小工具简单使用技巧
- win10桌面背景为什么突然变黑了 win10桌面背景不显示解决方法
- 用Python实现TXT文件分割