当前位置: 首页 > article >正文

【数据结构】kmp算法介绍+模板代码

目录

1.kmp算法介绍

2.应用场景

3.KMP与暴力算法比较

4.模板代码


KMP算法是一种高效的字符串匹配算法,用于在文本串中快速查找模式串的所有出现位置。其核心思想是通过预处理模式串,避免在匹配失败时进行不必要的回溯,从而将时间复杂度优化至 O(n + m)(n为文本长度,m为模式串长度)。

2.应用场景

  • 大规模文本中的高效匹配(如编辑器、病毒扫描)。

  • 多次使用同一模式串时的预处理优势。

  • 需要线性时间复杂度的场景(如实时处理)。

3.KMP与暴力算法比较

特性KMP算法暴力算法
文本指针无需回退可能多次回退
时间复杂度O(n + m)O(n*m)
空间复杂度O(m)(存储LPS数组)O(1)

4.模板代码

void getnext(char *p)
{
	int lenp=strlen(p);
	nextt[0]=-1;
	int k=-1;
	int j=0;
	while(j<lenp-1)
	{
		if(k==-1||p[j]==p[k])
		{
			j++;
			k++;
			nextt[j]=k;

		}
		else
		{
			k=nextt[k];
		}
	}
	return;
}

int KMP(char *s,char *p)
{
	int i=0;
	int j=0;
	int lens=strlen(s);
	int lenp=strlen(p);
	while(i<lens&&j<lenp)
	{
		if(j==-1||s[i]==p[j])
		{
			j++;
			i++;
		}
		else
		{
			j=nextt[j];
		}
	}
	if(j==lenp)
	return 1;
	else
	return 0; 
}


http://www.kler.cn/a/597571.html

相关文章:

  • 链游开发定制搭建:基于Dapp合约的链上游戏探索
  • Spring事务失效场景
  • prometheus 添加alertmanager添加dingtalk机器人告警
  • Linux 目录结构详解
  • 多阶段构建实现 Docker 加速与体积减小:含文件查看、上传及拷贝功能的 FastAPI 应用镜像构建
  • Spring Boot集成PageHelper:轻松实现数据库分页功能
  • 【Go】切片
  • 给管理商场消防安全搭建消防安全培训小程序全过程
  • 开源链动2+1模式与AI智能名片赋能的S2B2C共享经济新生态
  • 【零基础入门unity游戏开发——unity3D篇】3D模型 —— Model 模型页签
  • C++和标准库速成(十一)——简单雇员系统
  • 360度用户信息赋能老客运营自动化
  • 【AVRCP】深度剖析 AVRCP 中 Generic Access Profile 的要求与应用
  • vue如何获取 sessionStorage的值,获取token
  • 【分布式】冰山(Iceberg)与哈迪(Hudi)对比的基准测试
  • MyBatis-Plus的加载和初始化
  • OpenCV Imgproc 模块使用指南(Python 版)
  • S32K144外设实验(二):ADC单通道单次采样(软件触发)
  • 基于 pyflink 的算法工作流设计和改造
  • OpenCV Video 模块使用指南(Python 版)