首页 > 编程语言 >kmp算法模板

kmp算法模板

时间:2024-10-10 10:24:06浏览次数:8  
标签:nxt int 算法 && kmp strlen 模板

void kmp() {
    n = strlen(s + 1);   // s是目标串
    m = strlen(p + 1);  // p是模板串
    // nxt预处理开始
    int j = 0;
    nxt[1] = 0;
    for (int i = 2; i <= m; i++) {
        while (j > 0 && p[j + 1] != p[i]) /* 判断当前子串的前后缀相等的长度是否能增加或减少
        注意j>0不要漏,这就是为什么" "+字符串的原因*/
            j = nxt[j];
            if(p[j + 1] == p[i]) //同上 (增加)  
                j++;
            nxt[i] = j;
    }
        // 预处理结束
        // 匹配部分
    j = 0;
    for (int i = 1; i <= n; i++) {
        while((j == m) || (j > 0 && p[j + 1] != s[i]))//j==m是已经到头了,也需要回退
            j = nxt[j];
        if(p[j + 1] == s[i])
            j++;
        f[i] = j;
        }
}
// 
//找有多少符合的串的数量
for (int i = 1; i <= n; i++) {
    if(f[i] == m) { //f[i]=模式串的长度时成立
        ans++;
    }
}
//算法复杂度为 n+m

标签:nxt,int,算法,&&,kmp,strlen,模板
From: https://www.cnblogs.com/puningyyb/p/18455794

相关文章

  • 从理论到实践:AI智能分析网关V4烟火检测算法的应用场景探索
    在信息化和智能化的今天,AI智能分析网关V4作为一款集成了先进技术的硬件设备,在烟火检测领域展现出了强大的应用价值。本文将详细阐述AI智能分析网关V4烟火检测算法的原理及其在各种场景中的应用。一、AI智能分析网关V4烟火检测算法原理深度学习基础TSINGSEE青犀AI智能分析网关V4......
  • JS高级-ES6之模板字符串与剩余参数
    在本章节中,我们学习新的字符串拼接方式:标签模板字符串,动态效果与自由使用程度得到进一步提升函数的默认参数更好的解决方案,以及结合解构的进阶使用方式剩余参数的进一步说明,箭头函数的补充,以及展开语法对数据的处理细节是怎么样的,深拷贝还是浅拷贝,都会得到说明一、字符......
  • 数据结构与算法2
    目录栈和队列1.栈(stack)1.1栈的定义和特点1.2顺序栈的表示1.3顺序栈的实现1.3.1顺序栈的初始化1.3.2顺序栈判断栈是否为空1.3.3求顺序栈长度1.3.4清空顺序栈1.3.5销毁顺序栈1.3.6顺序栈的入栈1.3.7顺序栈的出栈1.4栈链的表示1.5栈链的实现1.5.1栈链的初始化1.5.2判断......
  • 网页设计模板怎么使用-如何去修改呢?
    使用和修改网页设计模板通常涉及以下几个步骤:选择合适的模板:根据你的网站需求选择一个适合的设计模板。下载或安装模板:从模板提供商处下载模板文件,并按照说明将其安装到你的网站系统中。了解模板结构:通过查看模板的HTML、CSS和JavaScript文件来理解其基本结构和样式设置。修......
  • 算法笔记(十五)——BFS 解决拓扑排序
    文章目录拓扑排序课程表课程表II火星词典拓扑排序有向无环图(DAG图)有向无环图指的是一个无回路的有向图AOV网:顶点活动图在有向无环图中,用顶点表示一个活动,用边来表示活动的先后顺序的图结构拓扑排序找到一个先后顺序,结果可能不唯一如何拓扑排序?找到一......
  • 二分图最大匹配-匈牙利算法
    二分图最大匹配设G为二分图,若在G的子图M中,任意两条边都没有公共节点,那么称M为二分图G的一组匹配。在二分图中,包含边数最多的一组匹配称为二分图的最大匹配。交替路:从一个未匹配点出发,依次经过非匹配边、匹配边、非匹配边…形成的路径叫交替路。增广路:从一个未匹配点......
  • 算法修炼之路之前缀和
    目录一:一维前缀和二:二维前缀和 三:LeetCodeOJ练习  1.第一题2.第二题 3.第三题 4.第四题5.第五题6.第六题一:一维前缀和这里通过例题来引出牛客_DP34【模板】前缀和画图分析:具体代码:#include<iostream>#include<vector>usingnamespacestd;int......
  • 算法校赛准备
    独木桥题目背景战争已经进入到紧要时间。你是运输小队长,正在率领运输部队向前线运送物资。运输任务像做题一样的无聊。你希望找些刺激,于是命令你的士兵们到前方的一座独木桥上欣赏风景,而你留在桥下欣赏士兵们。士兵们十分愤怒,因为这座独木桥十分狭窄,只能容纳$1$个人通过。假如......
  • KMP循环节
    KMP循环节在icpc2019ChinaCollegiateProgrammingContestQinhuangdaoOnsiteJ.MUVLUVEXTRA由题易得,要求这个数的小数部分的\(S=a×循环长度−b×循环节的长度\),让这个S尽可能的大。又因为对于循环长度我们可以用kmp算法来求出最小循环节,所以我们可以枚举循环长度......
  • 代码随想录算法训练营 | 背包问题 二维,背包问题 一维,416. 分割等和子集
    背包问题二维题目链接:背包问题二维文档讲解︰代码随想录(programmercarl.com)视频讲解︰背包问题二维日期:2024-10-09想法:dp[i][j],i表示需要从物品0-i中选择加入到背包中,j表示背包的容量,dp值表示最大的价值;递推公式,如果背包大小j都比此时要放的物品i的weight[i]小了,背包放不下......