串的模式匹配(选择题)(期末数据结构复习9)

求next数组(也就是卡到这个下标的位置的时候让模式串向后移动多少位)

//要找最大前缀后缀匹配值

a b a a b c

0 1 1 2 2 3

求nextval数组

nextval数组是在next数组缺陷的情况下提出的,例如:模式“aaaab”在和主串"aaabaaaab"匹配时,当i=4,j=4时s.ch[i]!=T.ch[j],由于next[j]=3的指示,会模式串右滑一位进行i=4,j=3的比较,接着有根据next数组的指示会进行i=4,j=2,i=4,j=1的比较。实际上,因为模式串1~3个字符和第四个字符都相等,因此不需要再和主串中第第四个字符比较,而可以将模式串连续向右滑4个字符的位置直接进行i=5,j=1的比较。

因为next存在上述的问题,所以提出了next数组的修改值——nextval数组,

 

1.设主串 T = abaabaabcabaabc,模式串 S = abaabc,采用 KMP 算法进行模式匹配,到匹配成功时为止,在匹配过程中进行的单个字符间的比较次数是:10

//先比较了5次,到了c之后,向后移动3位,之后比较了5次,一共10次

2.串“ababaabab”的nextval为010104101

题目描述 餐厅中有 nn 个订单,每个订单都是一道由指定原材料制成的菜。 订单必须依次完成,若上的菜符合当前订单的要求,订单完成并消失;若上的菜不符合当前订单的要求,订单会仍然存在。 每完成一个订单,均会获得 pp 分,而连续成功完成订单可以获得小费作为分数奖励,连续第 xx 个完成的订单可以获得 q×(x−1)q×(x−1) 的额外分数。 所有订单全部完成后,再次上菜不获得任何分数。 鹦鹉厨师按照一定的顺序上了 mm 道菜,他想知道自己最后获得了多少分数。 输入数据 第 11 行 33 个整数 n, p, q (1≤n≤105, 1≤p, q≤100)n, p, q (1≤n≤105, 1≤p, q≤100)。 接下来 nn 行,第 i+1i+1 行表示第 ii 个订单,每个订单由一个字符组成,该字符的每个字符表示这个订单要求的一个原材料。 接下来 11 行,一个整数 m (1≤m≤105)m (1≤m≤105)。 接下来 mm 行,第 n+i+2n+i+2 行表示第 ii 道菜,每道菜由一个字符组成,该字符的每个字符表示这个道菜包含的一个原材料。 若上菜的原料集合和订单相同,即可算作完成订单要求。 保证每个字符长度不超过 44 且每个字符均为大写英文字母。 例: 若订单为 ABCABC,菜为 BACBAC,订单成功。 若订单为 AABAAB,菜为 ABAABA,订单成功。 若订单为 AABAAB,菜为 AAAA,订单失败。 若订单为 AAAA,菜为 AABAAB,订单失败。 输出数据 输出一个数字为鹦鹉厨师最终获得的分数。
03-23
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值