串(string)

定义

串的数据对象限定为字符集

存储结构

  1. 定长顺序存储
#define MaxLen 255  // 定义最大串长
typedef struct{
	char ch[MaxLen];
	int length;  // 串的实际长度
}SString;
  1. 堆分配存储
typedef struct{
	char *ch;  // 按串长分配存储区
	int length;  // 串的长度
}HString;

串的模式匹配

模式匹配:求子串在主串中的位置,子串也叫模式串

简单模式匹配:逐个字符去与主串匹配
主串、子串长度n、m,时间复杂度为O(nm)

改进——KMP算法
主串不会回溯,匹配失败后从上一次结束点继续
模式串则从next处开始
时间复杂度为O(m+n)

主串位置12345678
模式串abaabcac
next[j]01122312
nextval[j]01021302

推荐B站这个视频,https://www.bilibili.com/video/BV1it411r7ZD/
关于next数组的手动计算,推荐去观看网上的视频

首先解释一下:
next[j]就是模式串中,前缀和后缀相等时对应前缀/后缀的最大长度
n e x t [ j ] = { 0 模 式 串 首 位 置 M A X 从 首 字 符 开 始 的 前 缀 与 尾 字 符 结 束 的 后 缀 的 最 大 相 等 长 度 1 前 后 缀 不 相 等 next[j]=\left\{ \begin{array}{rcl} 0 & & 模式串首位置\\ MAX & & 从首字符开始的前缀与尾字符结束的后缀的最大相等长度\\ 1 & & 前后缀不相等 \end{array} \right. next[j]=0MAX1

所谓前缀(后缀),就是主串去掉第一个字符(最后一个字符)所剩所有子串。


小狼的相关博文:

  1. 算法(Algorithm)与数据结构(Data Structure)——索引
  2. 计算机408考试纲要
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值