单选题
在字符串的模式匹配过程中,如果模式串的每个字符依次和主串中一个连续的字符序列相等,则称为匹配成功。如果不能在主串中找到与模式串相同的于串,则称为匹配失败。在布鲁特—福斯模式匹配算法(朴素的或基本的模式匹配)中,若主串和模式串的长度分别为n和m(且n远大于m),且恰好在主串末尾的m个字符处匹配成功,则在上述的模式匹配过程中,字符的比较次数最多为________。
【正确答案】
B
【答案解析】 本题考查数据结构基础知识。
假设主串和模式串的长度分别为n和m,位置序号从0开始计算。设从主串的第i个位置开始与模式串匹配成功,在前i趟匹配中(位置0~i-1),每趟不成功的匹配都是模式串的第一个字符与主串中相应的字符不相同,则在前i趟匹配中,字符的比较共进行了i次,而第i+1趟(从位置i开始)成功匹配的字符比较次数为m,所以总的字符比较次数为i+m(0≤i≤n-m)。
而在最坏情况下,每一趟不成功的匹配都是模式串的最后一个字符与主串中相应的字符不相等,则主串中新一趟的起始位置为i-m+2。若设从主串的第i个字符开始匹配时成功,则前i趟不成功的匹配中,每趟都比较了m次,总共比较了i×m次,第i+1趟的成功匹配也比较了m次。因此,最坏情况下的比较次数为(n-m+1)*m。