数据结构【串】

串(简单记录)

串也是一种线性表

字符串匹配模式

字串:主串中包含的 一些字符串
模式串:进行指定一系列的 字符 然后在主串中寻找,可能能找到,也可能没有。

字符串匹配:也就是在 字符串中寻找指定的模式串,找到返回下标(返回的是匹配 串开头的位置)。

朴素模式匹配算法

时间复杂度:o(nm)
在这里插入图片描述
根据模式串 依次挨着匹配,知道最后匹配成功或者失败。

当有字段匹配不成功时候,将 主串i 回归,i=i-j+2;
j 也就是模式串回复到 初始位置。

KPM算法

求next数组时间复杂度o(m)
匹配o(n)
时间复杂度:o(n+m)

即基于朴素匹配算法的一次优化,不用每次都让 模式串从开头 进行匹配
在这里插入图片描述
next数组默认,j[1] = 0、j[2] = 1;

求next数组(手算)

在这里插入图片描述
如若忘记查看,23版本串3.4.2.2_求next数组

nextval

nextval是对next下标的进一次优化。

如图 模式串到 b匹配失败,按照正常KMP中next算法,那么j=2,但是目前5和2都是b,因此再一次匹配还是会失败,所以根据nextval 可以直接将j=1
在这里插入图片描述

做题计算nextVal

1、第一个方式就是每次都根据主串进行算,比较麻烦
2、第二个方式
基于next数组。
1无脑写 0
后面的根据next的下标,如:序号2为a,next[j]对应 序列为j=1的,如果两个字符相同,那么nextVal 值直接抄前面的(j=2的nextval=0)。如果值不相等 那么next[j]=nextVal.

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值