一、单项选择题
————————————————————
————————————————————
解析:求子串操作是从串S中截取第i个字符起长度为1的子串,A错误。B、D明显错误。
正确答案:C
————————————————————
————————————————————
解析:在KMP算法的比较过程中,主串不会回溯,所以主串的指针不会变小。
正确答案:B
————————————————————
————————————————————
解析:尽管实际应用中,一般情况下简单的模式匹配算法的时间复杂度近似为0(m+n),但它的理论时间复杂度还是O(mn)。KMP算法的时间复杂度为O(m+n)。
正确答案:C、D
————————————————————
————————————————————
解析:在KMP匹配中,当主串的第i个字符和模式串的第j个字符不匹配时,主串的位指针i不变,将主串的第i个字符与模式串的第next[j]个字符比较,即j=next[j]。
正确答案:D
————————————————————
————————————————————
解析:在KMP匹配中,当主串的第i个字符和模式串的第j个字符不匹配时,主串位i不回溯。
正确答案:B
————————————————————
————————————————————
解析:
正确答案:A
————————————————————
————————————————————
解析:
正确答案:C
————————————————————
————————————————————
解析:next数组是否整体加1都正确
正确答案:C
————————————————————
————————————————————
解析:
正确答案:C
————————————————————
————————————————————
解析:由题中“失配s [i]≠t[j]时,i=j=5”,可知题中的主串和模式串的位序都是从0开始的(要注意灵活应变)。按照next数组生成算法,对于t有
发生失配时,主串指针i不变,子串指针j回退到next[j]位置重新比较,当s[i][j]时,i=j=5,由next表得知next[j]=next[5]=2(位序从О开始)。因此,i=5,j=2。
正确答案:C
————————————————————
————————————————————
解析:假设位序从0开始的,按照next数组生成算法,对于s有
第一趟连续比较6次,在模式串的5号位和主串的5号位匹配失败,模式串的下一个比较位置为next [5],即下一次比较从模式串的2号位和主串的5号位开始,然后直到模式串的5号位和主串的8号位匹配,第二趟比较4次,匹配成功。单个字符的比较次数为10次。
答案:B
二、综合应用题
————————————————————
————————————————————
答案:
————————————————————
————————————————————
答案:
1)