数据结构 串的模式匹配

全部每周作业和视频思考题答案和解析 见 浙江大学 数据结构 思考题+每周练习答案

题目一:若给定文本长度为 n,模式长度为 m,则库函数 strstr 的最坏时间复杂度是:

  • A. O(nm)

  • B. O(n)

  • C. O(m)

  • D. O(n+m)

乍看一眼就是O(nm),当然,我们可以想象到,除非m=1,否则不可能出现正好是n*m次比较的结果。

题目二:对于 pattern = abcabcacab,最后 3 个字符的 match 值是多少?

  • A. 2, 3, 1

  • B. -1, 0, 1

  • C. -1, 0, -1

  • D. 5, 6, 4

这个c所在的子串abcac和前面的配不上,而且又和一开始的a配不上,所以为-1,然后a和一开始的a配上了,为0,然后b为1。

选B

题目三:如果 match[j] 的值不是满足子序列条件的“最大”i,会出现什么问题?

如果会出现问题,肯定就是没有匹配到呗。我们思考一下为什么会匹配不到:

比如 abcabca ,match表示为:

我觉得这个题目表达是有问题的,但是又不好描述,只能画个图来说说这个思考问题是想干嘛。如果match不取最大i的时候,就可能出现下面这种匹配:蓝色表示能被匹配上的字符子串

在做匹配的时候,string的abcabca和pattern的abcabcac正好相互匹配,而下一个就不匹配了,所以这个时候a就变为了0。

感觉这个思考题没什么意义???

为什么不能直接用 pattern: abcabcacabb 的最后一个能匹配上的子串进行匹配而要用最大的 i 呢?比如这里的最后面的ab

比如我们要进行匹配的子串是:abcabcacabab.....模式字串为abcabcacabb,如果用abca进行匹配,那么:

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Dezeming

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

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

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

打赏作者

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

抵扣说明:

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

余额充值