1串的匹配子串的定位操作称为串的模式匹配,是各种串处理中最重要的操作
在主字符串S中查找模式字符串P,若在主串中找到等于模式串的子串,称为匹配成功,返回与模式串第一个相等的字符在主串中的序号;若匹配不成功,则返回0
1串的简单匹配串的简单匹配,基本思想是:从主串的第一个字符起和模式串的第一个字符比较,若相等,则继续逐个比较后续的字符,否则从主串的第二个字符起再重新和模式串的字符比较
依此类推,直至模式串的每个字符依次和主串中的一个连续的字符序列相等,则为匹配成功……【例4-1-1】:主串:ababcabcacbab匹配串:abcac↓i=3第一趟匹配:ababcabcacbababc↑j=3↓i=2第二趟匹配:ababcabcacbaba↑j=1↓i=7第三趟匹配:ababcabcacbababcac↑j=5↓i=4第四趟匹配:ababcabcacbaba↑j=1↓i=5第五趟匹配:ababcabcacbaba↑j=1↓i=11第六趟匹配:ababcabcacbababcac↑j=6这种算法易于理解,在某些场合效率也较高
但当主串为‘000000000000000000000000000000000000000000000000001’,模式串为‘00000001’时,由于模式串中前7各字符均为‘0’,主串中前50各字符均为‘0’,每趟比较都在模式串的最后一个字符出现不等,此时需将指针i回溯到i-6的位置上,并从模式的第一个字符开始重新比较
直到匹配成功,指针i需回溯43次
这经常出现在主串中存在多个子串和模式串“部分匹配”的情况下,例如01串(字符串由0、1组成)
2串的KMP匹配算法这种改进的算法是由D
Knuth、V
Pratt和J
Morris三人同时发现的,所以称为KMP算法
(一)KMP算法的基本思路KMP算法每当一趟