(kuangbin带你飞--kmp)Number Sequence_kuangbin number sequence-程序员宅基地

技术标签: KMP  kmp  

原题目:

Given two sequences of numbers : a[1], a[2], ...... , a[N], and b[1], b[2], ...... , b[M] (1 <= M <= 10000, 1 <= N <= 1000000). Your task is to find a number K which make a[K] = b[1], a[K + 1] = b[2], ...... , a[K + M - 1] = b[M]. If there are more than one K exist, output the smallest one.

Input

The first line of input is a number T which indicate the number of cases. Each case contains three lines. The first line is two numbers N and M (1 <= M <= 10000, 1 <= N <= 1000000). The second line contains N integers which indicate a[1], a[2], ...... , a[N]. The third line contains M integers which indicate b[1], b[2], ...... , b[M]. All integers are in the range of [-1000000, 1000000].

Output

For each test case, you should output one line which only contain K described above. If no such K exists, output -1 instead.

Sample Input

2
13 5
1 2 1 2 3 1 2 3 1 3 2 1 2
1 2 3 1 3
13 5
1 2 1 2 3 1 2 3 1 3 2 1 2
1 2 3 2 1

Sample Output

6
-1

思路:
一般的kmp,没有别的区别

#include<stdio.h>
#include<string.h>
int next[10005],lena,lenb;
int a[1000005],b[10005];
void set_naxt()                  //子串的next数组:一个字符串的最长前缀和最长后缀相同的长度
{
    int i=0,j=-1;
    next[0]=-1;                  //初始化为-1,表示不存在相同的最长前缀和最大后缀
    while(i<lenb)
    {
        if(j==-1||b[i]==b[j])
        {
            i++;
            j++;
            next[i]=j;           //把j(相同的最大前缀和最大后缀的长)赋值next[i]
        }
        else
            j=next[j];           //往前回溯
    }
}
int kmp()
{
    int i=0,j=0;                 //比较时j=0
    set_naxt();
    while(i<lena)
    {
        if(j==-1||a[i]==b[j])
        {
            i++;
            j++;
        }
        else
            j=next[j];           //在这里有可能等于-1
        if(j==lenb)
            return i-j+1;
    }
    return -1;
}
int main()
{
    int i,t;
    scanf("%d",&t);
    while(t--)
    {
        memset(next,0,sizeof(next));
        scanf("%d%d",&lena,&lenb);
        for(i=0; i<lena; i++)
            scanf("%d",&a[i]);
        for(i=0; i<lenb; i++)
            scanf("%d",&b[i]);
        printf("%d\n",kmp());
    }
}

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43791787/article/details/98782782

智能推荐

HTML5&CSS3新特性_html5和css3新特性-程序员宅基地

文章浏览阅读7.9k次,点赞23次,收藏222次。一.HTML5新特性HTML5新特性针对于以前的不足,增加了一些新的标签,新的表单,新的表单属性等。1.新增语义化标签新增的带有语义化的标签二.CSS3新特性_html5和css3新特性

pytorch中torch.nn.Conv2d中的groups参数_torch depthwise conv group=-程序员宅基地

文章浏览阅读1.4k次。先来看官方的说明:groups = 1 时就是标准的卷积运算groups=2 时就是分组为2的组卷积分组后分两半进行卷积运算,6个卷积核分两组,最后将结果cat在一起groups = input_channels的情况是这样的当输入通道数等于输出通道数时,就是深度可分离卷积的depthwise conv,可查看mobilenet的论文理解该卷积令我迷惑的时输出通道数不..._torch depthwise conv group=

嵌入式软件学习,你知道如何将屏幕翻转180度吗?i.MX6ULL ---- ElfBoard 的ELF1 板卡_qt 屏幕旋转180度-程序员宅基地

文章浏览阅读94次。MatchDevicePath "/dev/input/event*" //设备节点。3.断电,连接屏幕,上电,等待系统启动完成,此时可以看到qt界面已经翻转180度。MatchProduct "goodix-ts" //设置当前触摸设备。Option "InvertY" "1" //翻转 Y 轴。Option "InvertX" "1" //翻转 X 轴。Option "Rotate" "UD" //显示旋转 180°。2.添加如下标红内容。_qt 屏幕旋转180度

idea maven部分依赖无法导入_idea 引入项目,部分maven依赖引入不进来-程序员宅基地

文章浏览阅读103次。在网络和maven配置都没有问题的时候,仍然无法导入部分依赖的原因:大概率是所需要的依赖版本与idea版本或者是jdk有冲突,换一个idea版本能适应的版本就可以了。_idea 引入项目,部分maven依赖引入不进来

matlab如何使输出结果更美观(symdisp函数——pretty函数升级版)_matlab pretty-程序员宅基地

文章浏览阅读1.7w次,点赞44次,收藏86次。matlab中有些计算结果比较长,直接查看有些困难,下面介绍pretty和symdisp函数优化输出结果,使结果更为直观。演示示例1有一个计算结果如下:>> f1 f1 = y^5 + (- w - y0)*y^4 + 1800*y^3 + (1498200*w - 1800*y0)*y^2 + (3600*w*y0 + 810000)*y - 1350810000*w - 810000*y0 1. 使用pretty函数美化输出>> pretty(f1) 5_matlab pretty

学习Java必须避开的十大致命雷区,千万不要踩!_学习java的坏处-程序员宅基地

文章浏览阅读305次。Tiobe发布了最新一期(3月)编程语言欢迎度榜单,其榜单根据互联网上开发人员、课程和第三方厂商的数量,并根据使用搜索引擎(如Google、Bing、Yahoo!)以及Wikipedia、Amazon、YouTube统计出排名数据。毫无疑问,老大哥Java 稳居第一。同样都是编程语言,为何java那么优秀?创一个小群,供大家学习交流聊天如果有对学java方面有什么疑惑问题的,或者有什么想说的想..._学习java的坏处

随便推点

常见问题之Golang——invalid character ‘-‘ in numeric literal错误_invalid character '-' in numeric literal-程序员宅基地

文章浏览阅读5.2k次,点赞7次,收藏3次。常见问题之Golang——invalid character '-' in numeric literal错误背景本系列文章均为学习过程中记录的笔记,欢迎和我一起来学习Go语言。全文使用环境如下:操作系统:windows10使用工具:Goland开发工具golang版本:1.17简介本文主要是对我日常在使用golang时遇到的一些问题与解决方式进行的汇总,在此提供给大家便于排查..._invalid character '-' in numeric literal

(详细教程)笔记本电脑安装Ubuntu系统_ultraso-程序员宅基地

文章浏览阅读7.7k次,点赞21次,收藏24次。(详细教程)笔记本电脑安装Ubuntu系统_ultraso

Python爬虫手机版-程序员宅基地

文章浏览阅读636次。Python爬虫是一种用于抓取网站数据的自动化程序,其中包括手机版网站。 在进行爬虫编程时,需要使用Python语言编写代码,通过编写代码来自动发送HTTP请求,抓取网站的HTML源代码,并解析源代码中的数据。要编写Python爬虫程序来抓取手机版网站的数据,需要了解如何发送HTTP请求,如何解析HTML源代码,以及如何使用Python处理数据。 常用的Python库有: requests、be..._手机python爬虫工具

魔兽世界燃烧的远征最新服务器,6月2日加入“燃烧的远征” 立刻了解《魔兽世界》经典怀旧服的服务器抉择...-程序员宅基地

文章浏览阅读1.4k次。在诅咒之地的黑暗之门彼岸,有一个被燃烧军团的阴谋诡计撕碎的国度:外域,这里曾经是兽人们美丽的家园“德拉诺”。“燃烧的远征”将于北京时间6月2日于全球上线,一同探索这个国度的奥秘吧。但在此之前,所有英雄都必须做出选择。5月20日,国服服务器的例行维护结束后,“燃烧的远征”前夕补丁就将上线,每个角色都要做出选择,是踏上“燃烧的远征”、转入旧世经典服务器,或是使用角色复制服务在两款游戏中并肩同行。你可以...

TI mmWave radar sensors Tutorial 笔记 | Module 3: Velocity Estimation_timmwavesensor平台-程序员宅基地

文章浏览阅读318次。本系列为TI(TexasInstruments)mmWaveradarsensors系列视频公开课的学习笔记。视频网址https关注下面的公众号,回复“TI毫米波”,即可获取本系列完整的pdf笔记文件~内容在CSDN和微信公众号同步更新。_timmwavesensor平台

MATLAB算法实战应用案例精讲-【智能优化算法】海洋捕食者算法(MPA) (附MATLAB和python代码实现)_海洋捕食优化算法python-程序员宅基地

文章浏览阅读1.6k次。海洋捕食者算法(Marine Predators Algorithm,MPA)是Afshin Faramarzi等人于2020年提出的一种新的群智能优化算法。MPA的主要灵感来自于海洋捕食者中广泛存在的觅食策略,即Levy和布朗运动,以及捕食者与猎物之间生物相互作用中的最佳相遇率策略。MPA遵循海洋生态系统中最优觅食策略和捕食者和猎物之间的相遇率策略。本文评估了MPA在29个测试函数、CEC-BC-2017测试组、随机生成的情景、三个工程基准,以及在空气流通和建筑能源性能领域的两个实际工程设计问题上的性能。_海洋捕食优化算法python

推荐文章

热门文章

相关标签