首页 > 编程语言 >KMP 算法

KMP 算法

时间:2024-09-01 19:52:08浏览次数:10  
标签:nxt int res 笔记 学习 算法 KMP

学习笔记

我认为我这个算法可能无法讲明白,而且工作量巨大,所以为了让你快速学会我推荐学习下列笔记。

学习笔记1

学习笔记2

学习笔记3

例题

感觉经过上述的学习,你一定有所收获吧(如果没有的话还是菜就多练吧),所以接下来我会举出一些题目,应该会对你的学习有些帮助。

1.【模板】KMP(洛谷P3375)

如果你学 KMP 请先会做对这道题,这将会检验你的代码能力,请务必做对。

2.字符串中的最大值(51nod P1277)

这道题是对 KMP nxt数组 很好的应用,题意是求其所有前缀中,字符长度与出现次数的乘积的最大值。

我们可知 nxt 数组指示了当前模式串在该位置失配时,应该将模式串的哪一位与此位对齐,所以我们可以从后向前统计每个前缀的出现次数 \(res[]\),并将 \(res[nxt[i]]+=res[i]\) ,最后再从前向后计算最大值。

#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int N=1e6+10;
ll res[N];
char b[N];
int nxt[N];
int lenb;

int main(){
    ios::sync_with_stdio(false);
	
	cin>>b+1;
	
	lenb=strlen(b+1);
	
	int j=0;
	
	for(int i=2;i<=lenb;i++){
		while(j&&b[i]!=b[j+1]){
			j=nxt[j];
		}
		if(b[i]==b[j+1]){
			j++;
		}	
		nxt[i]=j;
	}
	ll ans=0;
	
	for(int i=lenb;i>=1;i--){
		res[i]++;
		if(nxt[i]!=0){
			res[nxt[i]]+=res[i];
		}
	}
	
	for(int i=1;i<=lenb;i++){
//		cout<<res[i]<<" ";
		ans=max(ans,res[i]*i);
	} 
	cout<<ans;
    return 0;
}

标签:nxt,int,res,笔记,学习,算法,KMP
From: https://www.cnblogs.com/sadlin/p/18391638

相关文章

  • 【3.5】贪心算法-解优势洗牌(类田忌赛马问题)
    一、问题        给定两个大小相等的数组A和B,A相对于B的优势可以用满足A[i]>B[i]的索引i的数目来描述。返回A的任意排列,使其相对于B的优势最大化。二、解题思路        这个问题要求我们重新排列数组A,使得在相同位置上,数组A的......
  • 【3.10】贪心算法-找出对应 LCP 矩阵的字符串
    一、题目对任一由n个小写英文字母组成的字符串word,我们可以定义一个nxn的矩阵,并满足:lcp[i][j]等于子字符串 word[i,...,n-1]和word[j,...,n-1]之间的最长公共前缀的长度。给你一个nxn的矩阵lcp。返回与lcp对应的、按字典序最小的字符串 word。如果......
  • 六大排序(算法详解+模板+例题)
    一.排序算法是什么排序算法(SortingAlgorithms)是一种数据结构操作,它的目的是将一串元素按照特定的顺序规则组织起来。常见的排序算法有升序(从小到大)和降序(从大到小)排列,如冒泡排序、希尔排序、插入排序、选择排序、快速排序、归并排序等。排序的主要目的是为了方便查找、分析数......
  • 面完阿里 AIGC 大模型算法岗,心态崩了。。。
    最近这一两周看到不少互联网公司都已经开始秋招提前批了。不同以往的是,当前职场环境已不再是那个双向奔赴时代了。求职者在变多,HC在变少,岗位要求还更高了。最近,我们又陆续整理了很多大厂的面试题,帮助一些球友解惑答疑,分享技术面试中的那些弯弯绕绕。合集:《大模型面试宝......
  • dubbo之时间轮算法分析
    文章目录前言一、参数说明二、具体实现1、HashedWheelTimer2、createWheel3、newTimeout4、start5、run6、waitForNextTick7、transferTimeoutsToBuckets8、expireTimeouts总结前言时间轮(TimingWheel)是一种高效利用线程资源进行批量化调度的算法,广泛应用于各种操作......
  • 算法专利复现_基于ngboost和SHAP值可解释预测方法
    大家好,我是重庆未来之智的Toby老师,最近看到一篇专利,名称是《基于NGBoost和SHAP值的可解释地震动参数概率密度分布预测方法》。该专利申请工日是2021年3月2日。专利复现我看了这专利申请文案后,文章整体布局和文字内容结构不错,就是创新点半天找不到。我们......
  • 高级字符串算法
    目录最长公共子串/子序列最长公共子串算法步骤代码示例复杂度分析最长公共子序列算法步骤代码示例复杂度分析正则表达式匹配正则表达式语法代码示例NFA与DFA在正则表达式匹配中的应用NFA(非确定性有限自动机)DFA(确定性有限自动机)NFA与DFA的比较字符串编辑距离(Le......
  • 基于感知哈希算法的以图搜图系统的设计
    摘 要随着数字媒体和计算机网络的迅猛发展,互联网上在线图像的飞速增长,用户对图形图像的搜索需求日益提高,一种“以图搜图”的新型搜索模式应运而生。“以图搜图”是以用户提供的图形图像图片等为视觉特征基础,为用户提供互联网上相关图形图像资料检索服务,这是一种专业的搜索引......
  • [转]高斯-牛顿算法
    Gauss-Newton算法是解决非线性最优问题的常见算法之一,最近研读开源项目代码,又碰到了,索性深入看下。本次讲解内容如下: 基本数学名词识记牛顿法推导、算法步骤、计算实例高斯牛顿法推导(如何从牛顿法派生)、算法步骤、编程实例高斯牛顿法优劣总结  一、基本概念定义1.......
  • 电商导购平台的推荐算法与大数据应用
    电商导购平台的推荐算法与大数据应用大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!电商导购平台的核心竞争力之一就是为用户提供个性化的购物体验,而推荐算法和大数据技术的应用是实现这一目标的关键。本文将探讨电商导购平台中推荐算法的设计和实现,以......