首页 > 编程语言 >KMP算法

KMP算法

时间:2024-11-17 09:19:38浏览次数:1  
标签:匹配 int long char 算法 KMP

字符串匹配算法:

利用最大相等的前后缀进行更好的匹配

#include <iostream>
#define int long long

using namespace std;

const int N = 1e6 + 10;

int m, n, ne[N], j;
char p[N], s[N];

signed main()
{
	cin >> n >> p + 1 >> m >> s + 1; //p+1是指从第二个索引开始读入,即从p[1]开始
	
	for (int i = 2, j = 0;i <= n;i ++) //找到上帝ne[i]
	{
		while (j && p[i] != p[j + 1]) j = ne[j];
		if (p[i] == p[j + 1]) j ++;
		ne[i] = j;
	}
	
	for (int i = 1, j = 0;i <= m;i ++) //开始匹配(让上帝帮我们优化)
	{
		while (j && s[i] != p[j + 1]) j = ne[j]; //不成功匹配则让上帝帮我们跳过不可能匹配的位置
		if (s[i] == p[j + 1]) j ++; 
		if (j == n) //匹配成功找到最初的索引并输出
		{
			printf("%Ld ", i - j);
			j = ne[j]; //进行下一轮匹配
		}
	}
	
	return 0;
}

标签:匹配,int,long,char,算法,KMP
From: https://www.cnblogs.com/acing/p/18550253

相关文章

  • 数据结构与算法刷题(参考代码随想录结构,C、C++实现)
    目录数组数组理论基础二分查找移除元素有序数组的平方长度最小的子数组螺旋矩阵Ⅱ总结篇链表1.链表理论基础2.移除链表元素3.设计链表4.反转链表5.两两交换链表中的节点6.删除链表的倒数第N个节点7.链表相交8.环形链表Ⅱ9.总结篇哈希表1.哈希表理论基础2.有效的字母异位词3.两个数......
  • python taichi 加速 dither仿色抖动算法
    教程9种dither算法与历史发展wiki:bayer有序抖动python生成任意规模bayer矩阵知乎:dither启发的艺术效果,半调/柱形taichindarray文档代码实现taichi_dither.py#!/bin/envpythonimporttaichiastiimportnumpyasnpimportcv2fromcopyimportdeepcopyti.init(......
  • 在MATLAB中实现自适应滤波算法
    自适应滤波算法是一种根据信号特性自动调整滤波参数的数字信号处理方法,其可以有效处理噪声干扰和信号畸变问题。在许多实时数据处理系统中,自适应滤波算法得到了广泛应用。在MATLAB中,可以使用多种方法实现自适应滤波算法。本文将介绍自适应滤波算法的基本原理和在MATLAB中实现自......
  • 构建最小生成树(Prim算法和Kruskal算法)
    其中克鲁斯卡尔算法中判断是否发生自环也可采用DFS和BFS判断,这里采用是并查集#include<iostream>#include<algorithm>#include<vector>usingnamespacestd;#defineINF100000000;classEdge{public:intx1,x2;//边的两个顶点intw;//权Edge(intX1......
  • 代码随想录算法训练营第四十七天|Day47 单调栈
    739.每日温度https://programmercarl.com/0739.%E6%AF%8F%E6%97%A5%E6%B8%A9%E5%BA%A6.html思路int*dailyTemperatures(int*temperatures,inttemperaturesSize,int*returnSize){int*answer=(int*)malloc(temperaturesSize*sizeof(int));int*sta......
  • 代码随想录算法训练营第四十八天|Day48 单调栈
    42.接雨水https://programmercarl.com/0042.%E6%8E%A5%E9%9B%A8%E6%B0%B4.html思路inttrap(int*height,intheightSize){intans=0;intleft=0,right=heightSize-1;intleftMax=0,rightMax=0;......
  • 算法沉淀一:双指针
    目录前言:双指针介绍对撞指针快慢指针题目练习1.移动零2.复写零3.快乐数4.盛水最多的容器5.有效三角形的个数6.和为s的两个数7.三数之和8.四数之和前言:此章节介绍一些算法,主要从leetcode上的题来讲解,讲解内容为做题思路,附加代码。欢迎与我大家一起学习共同进......
  • LL(1)分析算法
    LL(1)分析算法从左(L)向右读入程序,最左(L)推导,采用一个(1)前看符号.分析高效(线性时间)错误定位和诊断信息准确有很多开源或商业的生成工具ANTLR算法基本思想表驱动的分析算法graphLRx1["词法分析器"]--"记号\n\n"-->x2["语法分析器"]---->x3["......
  • 【转载】遗传算法—HyperNEAT Explained——Advancing Neuroevolution
    原文地址:https://hunterheidenreich.com/posts/next-gen-neuroevolution-hyperneat/ExpandingNeuroEvolutionLastweek,IwroteanarticleaboutNEAT(NeuroEvolutionofAugmentingTopologies)andwediscussedalotofthecoolthingsthatsurroundedthealgori......
  • Python实现Graham Scan算法并进行凸包计算
    目录使用GrahamScan算法进行凸包计算第一部分:GrahamScan算法概述1.1什么是GrahamScan算法?1.2算法的应用场景1.3算法的优点和局限第二部分:算法的数学基础与步骤2.1凸包的定义与性质2.2算法的关键步骤2.3极角计算公式2.4算法流程图第三部分......