全部每周作业和视频思考题答案和解析 见 浙江大学 数据结构 思考题+每周练习答案
题目一:若给定文本长度为 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进行匹配,那么: