首页 > 其他分享 >学习笔记:KMP

学习笔记:KMP

时间:2022-11-02 21:57:28浏览次数:47  
标签:匹配 string int 复杂度 笔记 学习 KMP size

引入

KMP是一种字符串匹配算法,可以在将近线性的时间复杂度内进行字符串匹配。

此类问题通常有一个文本串 $S$ 和一个模式串 $P$ 构成,说白了就是在 $S$ 中匹配 $T$,S.find(T)

不难打出一个暴力程序,原理是枚举 $S$ 中开始时匹配的位置,逐位匹配字符。设 $|S|=n,|T|=m$,则暴力的时间复杂度为 $O(nm)$,代码如下。

int compare(string S,string T)
{
	int n=S.size(),m=T.size();
	for(int i=0;i<n-m+1;i++)
	{
		bool fl=1;
		for(int j=0;j<m;j++)
		{
			if(S[i+j]!=T[j])
			{
				fl=0;
				break;
			}
		}
		if(fl)
		 return i;
	}
	return -1;
}//返回第一次匹配成功在S中的下标

思想

标签:匹配,string,int,复杂度,笔记,学习,KMP,size
From: https://www.cnblogs.com/lyz09-blog/p/study-kmp.html

相关文章

  • 【2022.11.2】Vue基础学习(7)
    内容详细1vue3介绍1.性能的提升打包大小减少41%初次渲染快55%,更新渲染快133%内存减少54%2.源码的升级使用Proxy代替defineProperty实现响应式......
  • IPV6的简单学习与整理
    背景大概2018年时曾经突击学习过一段时间IPV6当时没太有写文档的习惯,导致这边没有成型的记录了.今天又有项目要求使用IPV6,想了想就将之前学习的部分还有想继续学习......
  • 类的作用域详解(C++ primer7.4笔记)
    7.4类的作用域名字查找的过程:(查找匹配的声明)在名字所在块中寻找语句,查找使用名字之前出现的声明。如果没找到,查找外层作用域还没找到就报错类的定义分为两步处理:......
  • 核磁共振成像学习笔记——基本加权成像方式
    对核磁共振成像而言,最为基本的加权成像包括T1-weighted(T1W),T2-weighted(T2W),protondensity(PDW)。T1:是所谓的纵向弛豫时间,就是说你把质子磁化弄到z轴负向后,他要花......
  • SpringBoot笔记:集成MyBatis
    SpringBoot中使用MyBatis与MVC中本质是一样的,只是某些配置可以直接使用注解完成,使编码更加便捷了。1.pom依赖集成MyBatis通常需要MyBatis、Spring、数据库驱动三个依赖,......
  • vue学习笔记
    今日内容概要vue3介绍创建vue3项目的方式setup函数ref和reactive计算和监听属性生命周期hookstoRefs后台管理模板今日内容详细vue3介绍1.性能的提升......
  • 待学习内容记录
    目录待学习内容cross-storage已学习内容--待学习内容cross-storage已学习内容--......
  • OpenFlow:Enabling Innovation in Campus Networks论文学习
    一.可编程网络发展的背景 在过去日常生活中的网络技术设施几近僵化:已经大规模部署好的设备与协议与对在流量中进行网络实验开发的排斥,使得网络工程人员对于网络可以......
  • 日常笔记
    1.openresty+redis+lua缓存使用openresty+lua脚本实现多级缓存:用户访问openresty中的Nginx,若null则访问redis,若null则访问数据库,数据库返回信息并存储在redis,redis在存......
  • 学习笔记-pupy
    pupy免责声明本文档仅供学习和研究使用,请勿使用文中的技术源码用于非法用途,任何人造成的任何负面影响,与本人无关.项目地址https://github.com/n1nj4sec/pupy相......