王道--数据结构第四章 串

文章介绍了KMP算法的核心思想,即在字符串匹配过程中避免主串指针回溯,利用next数组存储模式串的匹配信息。KMP算法的优化体现在nextval数组的使用,它考虑了不匹配字符的位置。手算next和nextval数组是考研中的重要要求,并强调了做课后练习的重要性。
摘要由CSDN通过智能技术生成

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


串的顺序存储

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

字符串的模式匹配

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

字符串 KMP算法

KMP:利用好模式串本身的信息,当发生失配时,判断从哪个位置开始匹配。这个信息只与模式串有关,与主串无关。
匹配过程中,当发生不匹配的时候:如果j=1,那么令 j=0, i++, j++ ;如果 j > 1 ,那么主串 i 的指针不变,j 转化为KMP计算出的位置,继续匹配。
用KMP优化之后的串的匹配过程中,主串指针 i 不需要回溯。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

求KMP的next数组

KMP在acwing的课程:链接: link
KMP在B站的课程:链接: link

//求KMP的next数组的代码
//其中T是模式串
for (int i=2, j=0; i<=n; i++ ){
	while(j && T[i]!=T[j+1]) j=next[j];
	if(T[i] == T[j+1]) j++;
	next[i]=j;
}

考研中要求掌握手算的求KMP的next数组的方法

next[1]永远是0,next[2]永远是1
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

KMP算法的优化

(对KMP算法的优化本质上只是优化next[ ]为nextval[ ])

next[ ]考虑的是不匹配划线之前的

nextval[ ]考虑的是不匹配划线之前和不匹配的那一位,在nextval[ ]算之前要算好next[ ]

并不是所有的next[ ]都能进行优化

先算next[ ],再算在nextval[ ],nextval[0]无脑=0,之后再算nextval[ ]
在这里插入图片描述

在这里插入图片描述

Next[ ]数组和Nextval[ ]数组主要掌握手算的方法就可以了

一定要记得做课后题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱吃小酥肉的小波

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值