扩展KMP

一种高超声速飞行器弹道的仿真方法 设计并实现了一个高超声速飞行器弹道仿真算法,并应用到基于OSGEarth的态势中。 阅读详情

详解链接
hdu4300

题解链接
next[i]: T[i]…T[m-1]与T的最长公共前缀长度;
extend[i]: S[i]…S[n-1]与T的最长公共前缀的长度。
为什么说这是KMP算法的扩展呢?显然,如果在S的某个位置i有extend[i]等于m,则可知在S中找到了匹配串T,并且匹配的首位置是i。而且,扩展KMP算法可以找到S中所有T的匹配。接下来具体介绍下这个算法。

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=1e6+10;
int Next[maxn],extend[maxn];
void get_next(char a[])
{
    int len=strlen(a);
    Next[0]=len;
    int st,p;
    for(int i=1,j=-1;i<len;i++,j--)
    {
        if(j<0||i+Next[i-st]>=p)
        {
            if(j<0)
                p=i,j=0;
            while(p<len&&a[p]==a[j])
                p++,j++;
            Next[i]=j;
            st=i;
        }
        else
            Next[i]=Next[i-st];
    }
}
void get_extend(char a[],char b[])
{
    memset(Next,0,sizeof(Next));
    memset(extend,0,sizeof(extend));
    get_next(b);
    int st,p;
    int lena=strlen(a),lenb=strlen(b);
    for(int i=0,j=-1;i<lena;i++,j--)//j代表i与p 的距离
    {
        if(j<0||i+Next[i-st]>=p)//可以等于p
        {
            if(j<0)
                p=i,j=0;
            while(p<lena&&j<lenb&&a[p]==b[j])
                p++,j++;
            extend[i]=j;
            st=i;
        }
        else
            extend[i]=Next[i-st];
    }
}
int main()
{
    int ncase;
    scanf("%d",&ncase);
    while(ncase--)
    {
        char s1[100],s2[100010],s3[200010],s4[100];
        scanf("%s%s",s1,s2);
        int len=strlen(s2);
        for(int i=0;i<26;i++)
            s4[s1[i]-'a']='a'+i;
        for(int i=0;i<len;i++)
            s3[i]=s1[s2[i]-'a'];
        s3[len]='\0';
        get_extend(s3,s2);
        int f=len;
        for(int i=(len+1)/2;i<len;i++)
        {
            if(extend[i]+i==len)
            {
                f=i;
                break;
            }
        }
        for(int i=0;i<f;i++)
            printf("%c",s2[i]);
        for(int i=0;i<f;i++)
            printf("%c",s4[s2[i]-'a']);
        printf("\n");
    }
}
Codex,Copilot 是什么 GitHub Copilot是什么 **GitHub Copilot** 是一款由 **GitHub** 和 **OpenAI** 合作开发的 **AI 代码辅助工具**,它基于 **OpenAI Codex 技术**,能够根据上下文自动生成代码建议,大幅提升编程效率 阅读详情

相关推荐

26 硬件工程师笔面试高频考点真题解析——CAN总线

CAN总线是一种差分多主串行半双工总线,采用非破坏性位仲裁机制和五层硬件错误检测(位错误、填充错误、CRC校验、格式错误、应答错误),具有高可靠性和故障容错能力。关键设计包括两端120Ω终端电阻匹配阻抗、手拉手总线拓扑、显性/隐性电平优先级仲裁。常见故障分析指出多节点异常多因终端电阻错配/漏装、星型布线违规或总线过载;高速通讯失败常由阻抗失配或线缆过长导致信号反射。相比RS485,CAN支持多主架构、硬件自动仲裁和节点故障隔离,更适用于汽车、工业等高可靠场景。

XU157303764的博客 543

一些扩展kmp的总结

花了一天多时间学了下ex_kmp。。。。 可以看刘雅琼的ppt,讲的非常清楚: 下载地址:http://url.cn/Rvjxa9 ex_kmp可以在线性时间内求文本串的每个位置与模板串的最大公共前缀 ,写法和普通kmp差不多。。 我的写法是: next[i]: P[i..m-1] 与 P[0..m-1]的最长公共前缀 ex[i]: T[i..n-1] 与 P[0..m-1]的

码代码的猿猿 3097

【微知】关于GB200 NVL72服务器的一些信息?(36CPU72GPU;LPDDR5X 17T;HBM3e 13.5T;5代NVlink 1.8TB; 720P算力FP8;120Kw)

本文仅根据官网介绍分析,存在纰漏仅供参考。

技术札记 5380

KMP与扩展KMP

太久没用过都忘记了, 重新写了一遍, 加上了注释KMPO(n+m)O(n+m)#include &amp;lt;bits/stdc++.h&amp;gt; using namespace std;const int MAXP = 100, MAXT = 100000; int nxt[MAXP];//nxt[i]:=p[0~i-1]的最长相同前后缀(p[0~nxt[i]-1] == p[i-nxt[i]~i-1]) char

litmxs的博客 738

深入解析HAL_UART_Receive_IT:如何高效配置串口中断接收

本文深入解析了STM32 HAL库中`HAL_UART_Receive_IT`函数的工作原理与高效配置方法。该函数并非直接接收数据,而是作为中断接收的启动器和配置器,通过开启相关中断,由`UART_Receive_IT`在后台完成数据搬运。文章详细对比了中断与轮询模式的区别,并提供了不定长数据接收的完整实战流程、常见问题避坑指南及高级应用技巧,帮助开发者构建稳定高效的串口通信。

weixin_29162439的博客 626

UG/NX二次开发Siemens官方NXOPEN实例解析—1.3 BlockStyler/ExtrudewithPreview

随着工业智能化的不断发展,UG二次开发的需求越来越多,也吸引了大批的二开从业人员,本人作为一名资深IT从业者(10年+)也毅然加入二次开发大军。然而,和流行IT行业(互联网、金融、医疗等)相比,工业智能化的门槛显得更高一点,专业的工业软件,相对封闭的开发理念和更小的开发圈子,让刚进入二开的从业者有点举步维艰。边学边整理,希望通过这系列文章的整理能给二开的生态增添一叶绿。

MarcoPro的博客 1632

KMP算法的简单总结以及java代码实现

KMP研究 参考:http://blog.youkuaiyun.com/v_july_v/article/details/7041827 做了好几天KMP的题,今天终于写好了,可以总结一下这么多天学到的东西了,结合了众多版本之后觉得还是July写的最好,KMP是一个解决模式串在文本串是否出现过,以及若是出现时,最早出现的位置的经典算法。 首先,这个问题,如果用暴力方法解决的话就会有大量的回溯,每次只移动一

christ1750的博客 1万+

基于STM32F103设计的智能门锁(支持多种开锁解锁方式)

这个智能锁模型是基于STM32平台开发的,支持多种开锁方式。其中,一种是使用RC522射频卡读卡器读取IC卡卡号和内部数据,并验证身份后开锁;另一种是通过连接蓝牙地址来确认业主身份,实现了蓝牙自动开锁功能;最后一种是通过ESP8266连接腾讯云物联网平台,并且用户可以通过微信小程序“腾讯连连”进行远程开锁和关锁。这样,用户就可以选择最方便的方式来进行开锁操作了。

3万+

hdu-3336(拓展kmp)

Count the string Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 11956    Accepted Submission(s): 5547 Problem Description It is we

楚天千里清秋,水随天去秋无际 756

【RT-DETR实战】112、NCNN模型转换与层实现支持:从模型文件到推理引擎的硬核实战

本文详细记录了将RT-DETR模型部署到NCNN框架的全过程及关键要点。作者首先遇到MultiHeadAttention等算子不支持的问题,通过ONNX中间转换和自定义层实现解决。文章具体介绍了PyTorch到NCNN的权重转换技巧、模型优化方法(包括量化和线程优化)以及调试经验,强调逐层对比输出、预处理检查和边界情况测试的重要性。最后分享了保持转换流程可复现性的实用建议,指出手动调试虽然耗时但能加深对模型的理解,体现了工程师在解决技术难题时的专业精神与成就感。

企鹅码农的专属播客,分享10多年的实战案例和经验解读,包含YOLO、RT-DETR、AI等各个工作领域。 41

《用 Python 爬取统计局年鉴:从 API 抓取到结构化分析,实战全流程详解》

在数据分析、经济研究、商业决策中,国家统计局发布的年鉴数据具有权威性和参考价值。本篇博客将带你从零实践:了解目标、设计爬虫、抓取年度数据、解析 JSON、保存结构化数据、并用 Pandas 简要分析可视化,且使用现代 Python 最佳实践(如httpx、pydantic、typer 等),提升代码质量与效率。如何抓取国家统计局年鉴数据;利用 API 方式高效获取;使用现代异步 Python 提升性能;将数据结构化输出;结合 CLI、类型校验和简单分析技术提升实用性。

2201_76125261的博客 1085

扩展KMP的应用

FZU-1901 题意:字符串S,问满足S[i] = S[i+P],(i ∈[0,Size -P-1]),升序顺序输出P的取值。 很裸的ex_kmp的定义题!判断Next[j] == Size - j +1 ,以S[j]开头后缀子串是S的一个前缀子串。 /********************************* **...

long1的博客 752

服务部署之配置WSUS更新服务(基于Windows配置 Server 2022)

服务部署之配置WSUS更新服务(基于Windows配置 Server 2022)

2301_77192876的博客 2213

KMP+扩展KMP

KMP next数组表示P[j]以前最长相同前缀后缀 若下标从0开始(以下模板就采用这种方式),next[ i ] 表示前面长度为 i 的字符串前缀和后缀相等的最大长度为 next[ i ] 。 若下标从1开始,则next[ i ] 表示前面长度 i - 1的字符串中前缀和后缀相等的最大长度为 next[ i ] - 1 两种方式当S[i]与P[j]不同时j都应该移动到next[j] const ...

UniverseofHK的博客 777

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【模板】kmp以及扩展kmp

kmp算法: 最佳博客: http://www.cnblogs.com/dolphin0520/archive/2011/08/24/2151846.html  ; 这里面kmp算法讲的比较详细,我主要在这写下自己的kmp模板以及需要注意的地方。 void getnext(int t) { int i=0,j=-1; while(i!=t) { if(j==-1||a

ten_three 1051

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

kmp及扩展kmp

kmp kmp匹配主要匹配的是两个字符串,我们将需要匹配的记录为s1,用于匹配的串为s2. kmp匹配的是从以当前s1中的ch字符为末尾的字符串能够在s2中匹配的最大前缀的长度。 也即是s1中的每个前缀的最长后缀所匹配的s2的最长前缀。 先考虑自身与自身匹配的情况: 如果用dp+数学归纳来思考: 假设当前需要匹配j位置的字符,从0—j-1位置都已经记录了该位置能够匹配到的自身字符...

qq_38890926的博客 261

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

扩展kmp

扩展kmp本质还是kmp 有点类似马拉车 就是改变next数组含义为与记录与自身最长的公共前缀的长度(这个也用扩展kmp求) #include<iostream> #include<cstdio> #include<cmath> #include<string.h> #include<cstring> using namespac...

qq_41780519的博客 217

扩展KMP详解

以下摘自http://www.cnblogs.com/yefeng1627/archive/2012/12/24/2830979.html 刘雅琼PPT讲解链接:http://wenku.baidu.com/view/8e9ebefb0242a8956bece4b3.html扩展KMP:     给出模板串A和子串B,长度分别为lenA和lenB,要求在线性时间内,对于每个A[i](0 <= i

静静地码 955

kmp,manacher,扩展kmp算法总结

考虑到如果有一个位置不符合就从头再来,难免出现浪费,会不会可能出现无需重复比较的情况,那么如果目标子串匹配失败位置的前缀字符串的前缀和后缀有一个最长的匹配长度,首先既然可以来到这个位置,说明前面的字符串肯定完全匹配,那么此时把子串的前缀和母串的后缀对齐再继续比较下一个位置就可以省去了大量比较的时间,其实这就是kmp的本质,但是出现了几个问题,第一,为什么这样跳过一些位置就一定没有错过答案呢,第二,我怎么统计相同的前缀后缀呢,这个过程也并不简单呀,更何况我要统计每个位置的前缀字符串的最长前缀后缀匹配长度。

icebeeeeeef的博客 887

KMP 扩展KMP

1. kmp解决了求所有主串的前缀pre[i] (0 <= i < n)的后缀与模式串前缀的最大匹配长度问题 2. 拓展kmp解决了所有主串的后缀suf[i]的前缀,与模式串前缀的最大匹配长度问题. 3. 当且仅当len%(len-next[len])==0时,str[next[len]~len-1]为最小循环节

YueLing's Blog 530

【黑马计划-1】KMP及扩展KMP

KMP 核心 玄学 failfailfail 数组 failfailfail 数组的含义即是某段字符串的最长公共前后缀。 具体来讲,设 T[1…j−1]=T[i−j…i−1](j⩽i)T[1…j−1]=T[i−j…i−1](j⩽i)T[1\ldots j-1]=T[i-j\ldots i-1](j\leqslant i) ,那么 fail[i]fail[i]fail[i] 为 jjj ...

ezoixx174的博客 4791

扩展 KMP

目录 扩展 KMP 一:算法流程 二:代码 扩展 KMP 来源 问题定义:给定两个字符串 S 和 T(长度分别为 n 和 m),下标从 0 开始,定义 extend[i] 等于 S[i]... S[n-1] 与 T 的最长相同前缀的长度,求出所有的 ext...

weixin_43410808的博客 134

kmp和扩展kmp code

依据上篇的kmp和扩展kmp原理书写的代码 #include #include #include void Kmp(const char *A, const char *B) { int lenA = strlen(A); int lenB = strlen(B); int *next = (int *)malloc(lenB * sizeof(int));

hyforthy的旅程 859
上一篇: Manacher算法--O(n)回文子串算法
下一篇: 字符串的最大最小表示法
acmer_zp
博客等级 码龄11年 18粉丝 110原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值