关于KMP的next数组

【KMP】从原理上详解next数组和nextval数组 全网最详细的next和nextval讲解,并比较了与现在普遍的KMP算法实现中的next数组间的异同。 阅读详情

明明写的和课本一样,但是在PTA就是不正确,参考了别人的答案,发现有一个地方不一样记录一下!

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int next1[1000];
//next1[j] = k,表示当T[i] != P[j]时,j指针的下一个位置。
//求字串在主串中第一次出现的位置
void get_next1(char T[1000],int next1[],int len)
{
    int i=1,j=0;
    next1[1]=0;
    while(i<len)
    {
        if(j==0||T[i-1]==T[j-1])
        {
            ++i;
            ++j;
            next1[i]=j;
        }
        else
            j=next1[j];
    }

}
int main()
{
    char s1[1000],s2[1000];
    gets(s1);
    gets(s2);

    int len1=strlen(s1);
    int len2=strlen(s2);
//    if(len1>len2)
//    {
//        printf("  0");
//        return 0;
//    }
//    int flag=1;
    get_next1(s1,next1,len1);
    int i,j;
    for(i=1; i<=len1; i++)
        printf("%3d",next1[i]);
    printf("\n");

    i=0,j=0;
        while(i<len1&&j<len2)
        {
            if(s1[i]==s2[j])
            {
                i++;
                j++;
            }
            else
            {

                j=j-i+1;
                i=0;
            }
        }
        if(i==len1)
        {
            printf("%3d",j-i+1);
//            flag=1;
        }
        else
            printf("  0");

//    if(flag==0)
//        printf("  0");

    return 0;




}

KMP 算法中的 next 数组 Python微信订餐小程序课程视频 https://edu.youkuaiyun.com/course/detail/36074 Python实战量化交易理财系统 https://edu.youkuaiyun.com/course/detail/35475 KMP 算法中对 next 数组的理解 next 数组的意义 此处 next[j] = k;则有 k 前面的浅蓝色区域和 j 前面的浅蓝色区域相同; next[j] 表示当位置 j 的字符串与主串不匹配时,下一个需要和主串比较的字串位置在 next[j] 处;有下图: 若当前 阅读详情

相关推荐

容易理解的KMP算法next数组求法详解

如果你知道KMP算法的思想但还是自己写不出来,我猜你大概是不太明白next数组的求法。 网上很多关于KMP算法的博客写的都及其抽象和模棱两可。 我的上一篇博客 小白也能看懂的KMP算法 就是结合网上讲解的较为详细的博客,和学校老师的讲解,用自己的理解整合写出的。在里面开篇我就用大白话把KM这种算法令人砰然心动的地方讲解出来。 对于学什么东西,知道它好在哪,它的灵感来自于哪,适用于什么场景,很重要...

PERCENTILE__的博客 1438

PTA 7-1 字符串匹配问题(strs)

假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序随意,如([]())或[([][])]等为正确的匹配,[(])或([]()或(()))均为错误的匹配。现在的问题是,要求检验一个给定表达式中的括弧是否正确匹配?输入一个只包含圆括号和方括号的字符串,判断字符串中的括号是否匹配,匹配就输出OK,不匹配就输出Wrong。

shineinwind的博客 822

KMP算法中next数组以及nextval数组的求法

数据结构KMP算法很烦很抽象?next数组看不懂?nextval数组更是雾?阅读本文保证给您耳目一新的感觉。

weixin_45877045的博客 2748

【PTA数据结构 | C语言版】字符串匹配算法

请编写程序,得到模式串 t 在主串 s 中首次出现的位置。本题旨在测试各种不同的匹配算法在各种数据情况下的表现。各组测试数据特点如下:数据0:小规模字符串,测试基本正确性;数据1:随机数据,String 长度为 10^5,Pattern 长度为 10;数据2:随机数据,String 长度为 10^5,Pattern 长度为 10^2;数据3:随机数据,String 长度为 10^5,Pattern 长度为 10^3;

等风来 686

KMP算法next数组计算方法的优化

KMP算法的原理就是利用相匹配的前缀子串与后缀子串,来确定失配时下次对齐的位置; 其中最关键的就是next数组的确立; 数据结构课本上经典的例子: void getNext(const char *pStr, int *nextArr) { int i = 0, k = -1, pLen = strlen(pStr); nextArr[i] = k; int mLen = pLen

sowhat_Ah的专栏 2万+

Demo2Reward:用人类演示动态优化VLM奖励模型提示

多模态大模型(VLM)的奖励建模正面临核心瓶颈——静态提示导致语义鸿沟与泛化失效。其本质是将人类判断标准固化为不可更新的文本模板,使奖励信号脱离真实任务意图。Demo2Reward提出范式级改进:以结构化人类演示为元信号,驱动提示权重连续优化,实现从‘结果打分’到‘过程理解’的跃迁。该方法不修改VLM主干,却显著提升RLHF收敛效率与OOD鲁棒性,在医疗、工业质检等场景验证了跨任务迁移与热修复能力。它重新定义了提示工程的技术价值:不是前端微调,而是奖励系统的认知校准基础设施。

weixin_34302798的博客 408

病毒变种--C语言练习

C语言PTA练习题--病毒的变种

wk161099的博客 5442

海康威视iVMS-4200在银河麒麟系统部署全攻略与疑难排解

在信创国产化进程中,软件兼容性是关键挑战之一。以安防监控领域广泛使用的海康威视iVMS-4200客户端为例,其从Windows环境迁移到银河麒麟等国产操作系统时,面临架构适配、依赖库匹配等核心兼容性问题。这涉及到跨平台软件部署的通用原理:不同CPU架构(如ARM的飞腾、x86的兆芯)和操作系统底层API的差异,要求软件必须进行针对性编译和优化。解决这类问题的技术价值在于保障专业软件在国产化环境中的稳定运行,是信创产业落地的重要环节。具体到应用场景,如在基于银河麒麟V10的安防监控项目中,通过获取对应架构的.

weixin_33423874的博客 1423

7-4 字符串模式匹配(pta)

给定主串s和模式串p,编写程序输出p在s中出现的首位置,若p不在s中则输出-1。字符串下标从0开始。 输入格式: 输入为2行,第1行主串s,第2行为模式串p。主串和模式串长度不超过100000。 输出格式: 输出为2行,第1行为若干整数,表示模式串p的失败函数值,每个整数后一个空格;第2行为一个整数,表示p在s中出现的首位置,若p不在s中则输出-1。 输入样例: 在这里给出一组输入。例如: qwerabcabhlk abcab 结尾无空行 输出样例: 在这里给出相应的输出。例如: -1 -1 -1 0 1

q1430186623的博客 5668

VFIO框架源码分析(一)- 从初始化到设备访问

本文深入剖析了Linux内核中的VFIO(Virtual Function I/O)框架,详细解读了其从初始化到设备访问的全过程。VFIO通过Container->Group->Device的层次化设计,利用IOMMU提供安全隔离,允许用户空间直接访问物理设备。文章基于Linux v5.15版本,重点分析了vfio_init模块入口、Container创建与配置、Group关联以及最终设备访问等关键环节,揭示了VFIO如何通过逐层授权机制构建安全可靠的设备直通模型,为虚拟化技术提供核心支持。

qq_36071928的博客 380

振动能量采集技术:从原理到实战,破解物联网供电难题

能量采集技术旨在捕获环境中的废弃能量(如机械振动、热能、光能)并将其转化为电能,其核心原理在于通过压电、电磁、静电或摩擦电等物理效应实现能量形式的转换。这项技术的核心价值在于为物联网(IoT)中难以布线或更换电池的分布式传感器节点、植入式医疗设备等提供近乎永续的电力解决方案,从而解决物联网部署的“最后一米供电”瓶颈。其应用场景广泛覆盖工业预测性维护、结构健康监测、可穿戴设备及消费电子等领域。本文聚焦于振动能量采集这一细分方向,深入剖析了压电式、电磁式、电容式及摩擦纳米发电机(TENG)等主流技术路线的实战考

weixin_42660494的博客 566

PTA 好后缀 (10分)(字符串匹配+前缀函数)

7-8 好后缀 (10分) 我们称一个字符串的后缀为好后缀,如果它满足如下条件: (1)它在字符串中至少出现2次; (2)满足条件(1)的最长者。 请编写程序计算一个字符串的好后缀长度,注意一个字符串不能称为自己的后缀。 输入输出描述 输入格式: 输入为一个字符串,包含不超过10^​5个字母。 输出格式: 输出为一个整数,表示输入字符串的好后缀长度。 样例 输入样例1: xacbacba 输出样例1: 4 输入样例2: yxxabacaba 输出样例2: 3 输入样例3: abc 输出样例3: 0

不导翁的博客 2199

低功耗设计:如何计算power switch的数量?

power switch加多了漏电高,加少了ir drop会有问题,具体加多少合适要如何计算呢?这里可以给一个参考方式。 第一步,先选switch cell的类型 通常选用HVT类型的switch cell,优点是漏电更低,缺点也很明显,电阻大,压降也大,switch cell的大小选择,可以选择(开启电阻x面积)最小的switch cell,即单位面积提供最小并联电阻的cell类型。 第二步,计算数量 选好类型,确定了开启电阻,可以按照如下公式计算数量: Ron/Xnum • W/V = V•P

m0_61544122的博客 3576

KMP算法中的next数组求解

求解KMP算法中的next数组

guishangppy的博客 1万+

移位寄存器——用Verilog实现串入串出、串并和并串转换并进行Modelsim仿真

用Verilog实现串并转换 首先我们先要了并串和串并转换的原理 并串转换:先将八位数据暂存于一个八位寄存器器中,然后左移输出到一位输出端口,这里可以通过一个“移位”来实现,相当于实现了移位寄存器的功能。 串并转换:新输入的位值成为原来数据的最低位,将原来数据的最高位舍去,这里可以通过一个简单的“连接符”来实现。 我们这里采用两种方式来进行串并转换 一:lsb优先 Least Significant Bit,最低比特,最低位优先 二:msb优先 Most Significant Bit,最高比特,

H19981118的博客 2万+

面向 Cloud Foundry、ABAP On-Prem 与 ABAP Cloud 的 SAP Fiori 开发全景:工具、流程与实战案例

SAP Fiori开发实战:基于BAS的一站式工程化方法 摘要: 本文系统梳理SAP Business Application Studio(BAS)在Fiori开发中的核心能力,提供三种典型后端(Cloud Foundry/ABAP On-Prem/ABAP Cloud)的对接方案。BAS通过预置Fiori Tools套件、MTA部署工具等扩展,支持从模板创建、可视化建模到构建部署的全流程。文章包含CAP+RAP服务对接、ABAP标准应用扩展等实战案例,重点解析注解驱动开发、Adaptation Proj

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 255

KMP-两种方法求next数组

作为408考生,数据结构绕不开KMP算法,网上各种求next数组的方法和结果竟各有不同,本文将带你探讨产生这种局面的原因和求next数组的两种方法。

做想做的事,希望对你有用 1万+

第五章:转矩脉动的成因与抑制技术:从根源到解决方案

本文摘要: 转矩脉动是电机运行中的关键问题,涉及电磁、机械和控制三大因素。电磁因素包括谐波、齿槽转矩和磁饱和;机械因素涵盖动平衡和轴承缺陷;控制因素涉及测量误差和死区效应。解决方案采用多层面优化:硬件上通过斜极设计和死区补偿(提供算法代码)降低脉动70%;控制上采用扰动观测器和谐振控制器进行动态抑制;针对齿槽转矩开发离线学习+在线查表补偿方案。测试环节建立振动噪声量化评价体系,包括加速度计测量和A计权声学评估。最终形成从设计到控制的系统化抑制策略,显著提升电机静音性、平顺性和寿命。

汽车软件开发 338

KMP算法——详解next数组

令人烦恼的next数组,本文是作者自己的理解与思考,并不完善,只是为了提示自己,如果您已研究了KMP算法,本文对您的帮助并不大 next数组完成的任务: 当s1与s2字符串比较到上图所示位置时,拥有next数组的KMP算法不需要像BF算法一样: 将 j 回退到开始的第二个字符 将 i 退回到字符串头部 而是: 将 i 回退到第二个字符b处 j 不动 因为图示位置的前面都是匹配的字符 , 相匹配的字符串一定具有相同的前缀,所以b,c的比较就显得有点浪费资源,所以只需要找到相同的前缀就可以减少

qq_55229149的博客 1万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

KMP算法之next数组详解

KMP算法之next数组详解 KMP算法实现原理 KMP算法是一种非常高效的字符串匹配算法,下面我们来讲解一下KMP算如何高效的实现字符串匹配。我们假设如下主串和模式串: int i;//i表示主串的下标 int j;//j表示模式串的下标 char P[]=“ABCABDACFGHEADEW”;//主串 char T[]=“ABCABAEABD”;//模式串 开始查找 按照正常逻辑,我们都知道,如果我想在主串中匹配“ABCABAEABD”这个模式串,那么我们首先想到的是将主串和模式串中的每个

一点星光 1万+

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

KMP的next数组求法详解

部分参考了  BLOG kmp算法的精髓就在于next数组,从而达到跳跃式匹配的高效模式。 而next数组的值是代表着字符串的前缀与后缀相同的最大长度,(不能包括自身)。 "前缀"指除了最后一个字符以外,一个字符串的全部头部组合; "后缀"指除了第一个字符以外,一个字符串的全部尾部组合。 这里举个例子:     这样我们就求出来了next数组 模式串t ...

yutong5818的博客 5万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

KMP算法(next数组求法)

KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特—莫里斯—普拉特操作(简称KMP算法)。KMP算法的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是通过一个next()函数实现,函数本身包含了模式串的局部匹配信息。KMP算法的时间复杂度O(m+n)。

weixin_51780040的博客 1万+

KMP算法之next数组计算详细解析

KMP算法 相比BF算法的改进:每当一趟匹配过程中出现字符比较不等时,无需回溯i指针(即无需将i指针完全退回至i-j+1),而是利用已经得到的“部分匹配”的结果将模式向右“滑动”尽可能远的一段距离后,继续进行比较。 需要解决的问题:当主串中的第i个字符与模式中第j个字符比较不相等时,主串中第i个字符(i指针不回溯)应与模式中哪个字符再比较?----假设从主串中第i个字符与模式中的第k个字符再进行比较 它是则呢样来消除回溯的呢?就是因为它提取并运用了加速匹配的信息!   这种信息就是对于每模式串 t 的每个

weixin_46307478的博客 1万+

KMP算法的Next数组的优化

Next数组是KMP算法的一个难点,而求Next数组时最难的不过就是k = Next[k] 这一行了。首先要理解的是,k是在模式串当前角标之前已经匹配的前缀后缀的长度。 Next[i] 表示在角标i 之前已经匹配的前缀后缀的长度。 如果s[j] == s[k], 说明当前前缀和后缀可以匹配到长度为k的相同字符; 如果s[j] != s[k], 就说明了当前前缀后缀无法匹配到长度为k+1的相同字符,...

qq_43227036的博客 2256

KMP算法之next数组的实现

KMP算法的next数组实现

2301_79877271的博客 911

KMP算法中next数组的求取

前两篇博客分别介绍了KMP算法的理论基础及代码实现,但是KMP算法实现的核心在于next数组的求取,第一篇论文中介绍了next数组的手动求取方法;第二篇博客中介绍了代码实现,当时没有讲清楚,而且代码实现存在一定问题。本篇博文将详细介绍next数组的求取办法及代码实现。

2Know的博客 7117
上一篇: 读取二维字符数组
下一篇: 串的查找
Asssshzy
博客等级 码龄7年 28粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值