KMP 模板

本文详细介绍了KMP算法的原理,包括next数组的计算、匹配过程及代码实现,并提供了两个KMP模板题的解题思路,分别是寻找母串中首次出现子串的位置和计算子串在母串中出现的次数。文章通过实例展示了KMP算法在字符串匹配问题中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

KMP的理解https://segmentfault.com/a/1190000008575379(包含next数组求解,匹配过程,代码模板及其优化)

A - Number Sequence(KMP模板题)

题意:t组输入,n为母串的长度,m为子串的长度,求母串中首次出现子串的位置。这里的串换成了数组。(next数组在起名的时候不要用next,codeblocks编译过,vj会ce。)

#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
const int maxn=1e6+10;
int n,m;
int a[maxn];
int b[10005];
int nextt[10005];
void init()
{
	int i=0,j=-1;
	nextt[0]=-1;
	while(i<m)
	{
		if(j==-1||b[i]==b[j])
		{
			i++;
			j++;
			nextt[i]=j;
		}
		else
		{
			j=nextt[j];
		}
	}
}
void kmp()
{
	int i=0,j=0;
	int flag=0;
	init();
	while(i<n)
	{
		if(j==-1||a[i]==b[j])
		{
			j++;
			i++;
		}
		else j=nextt[j];
		if(j==m)
		{
			flag=1;
			printf("%d\n",i-m+1);
			break;
		}
	}
	if(flag==0)printf("-1\n");
}
int main()
{
	int t;
	scanf("%d",&t);
	while(t--)
	{
		scanf("%d%d",&n,&m);
		for(int i=0;i<n;i++)
			scanf("%d",&a[i]);
		for(int j=0;j<m;j++)
			scanf("%d",&b[j]);
		kmp();
	}
	return 0;
}

B - Oulipo(KMP模板题)

题意:tt组输入,w是子串,t是母串,求母串中出现子串的次数(可重叠)。样例:子串AZA,母串AZAZAZA,输出3。

和A题不一样的地方在A题找到匹配的串后跳出,B题找到符合的累加

while(i<lent){
   if(j==-1||t[i]==w[j]){
	j++;
	i++;
   }
   else {
     j=nextt[j];
   }
    
  if(j==lenw){
     cnt++;
  }
}
printf("%d\n",cnt);

 

资源下载链接为: https://pan.quark.cn/s/967a7e1a5d94 《东北大学应用数理统计2009—2020真题及个人答案解析》是一份极具价值的学习资料,对于准备东北大学应用数理统计课程考试的学生而言意义非凡。它涵盖了十二年的考试真题以及作者的详细答案解析,为学生提供了一个深入了解考试方向、复习要点和解题技巧的优质平台。 数理统计作为应用数学的重要分支,主要基于概率论理论,通过收集、分析、解释和呈现数据来解决实际问题。在东北大学的该课程中,学生需掌握诸多核心知识点,包括样本与总体、随机变量、期望值与方差、概率分布、假设检验、置信区间、线性回归等。 首先,样本与总体是统计学的基础概念。通过对样本的研究来推断总体特征,理解它们之间的关系及抽样分布的重要性至关重要。其次,随机变量是概率论的核心,无论是连续型还是离散型随机变量,掌握其概率密度函数或概率质量函数是进行统计推断的关键。期望值和方差分别反映随机变量的平均值和波动程度,帮助我们了解随机现象的中心趋势和稳定性。此外,常见的概率分布如均匀分布、正态分布、泊松分布、二项分布等,对于分析实际问题中的数据分布极为重要。假设检验是科研和决策中的重要环节,常用的T检验、Z检验、卡方检验和F检验等方法,能够帮助判断数据是否支持特定假设。置信区间则用于估计总体参数的不确定范围,其计算和解释是理解统计推断的关键。线性回归是预测和建模的常用方法,通过分析最佳拟合直线来揭示变量间的关系,而残差分析、多重共线性和模型选择等则是提升回归分析能力的重要方面。 在解答这些真题时,作者不仅检验了自己的知识掌握程度,还分享了个人的解题思路和策略。这些内容对于后来的学习者来说极具参考价值。通过深入研究这些真题和答案,学生可以熟悉考试的常见题型,把握出题老师的命题风格,并学会如何高效地组织和呈现答案。这份资料对于提升学生的数理统计理论水平和
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值