@
字符串比较
BF算法即为暴力破解算法
通过一位一位的移动,和比较来确定了,相重复的字符串
RK算法属于hash算法
通过一位一位的移动,来计算和相比较的目标字符串的hash值,这个减少比较的次数,但是也会出现需要移动一次,比较整个字符串的内容,跟暴力算法一样了
BM算法
坏字符规则:从右往左匹配,从要找的A字符串中找到第一个不匹配的字符(就是坏字符),将B字符串右移,直到B串中出现与A串坏字符对齐,再往左边继续寻找坏字符,如果B目标字符串中没有该坏字符,则直接移动到该坏字符的下一位即可;也就是在B中不匹配的字符之前找一个,跟A中坏字符相同的,把Byi
好后缀规则:从右往左匹配,找到坏字符(坏字符之后的就是好后缀),往左找B中是否还有该好后缀,若有则将B右移到该位置与A好后缀对齐,重复该规则。如果B串往右没有该好后缀,则右移到好后缀的右边一位,重复该规则,避免B串的前缀与好后缀的后缀匹配
综合使用,那种移动的位数多使用那种
时间复杂度O(n/m) ,退化时间复杂度O(n*m)
KMP复杂度
前缀,后缀
PMT值:前缀集和后缀集的交集中集中的最长元素的长度
在不匹配的字符串前A串的后缀和B串的前缀的最大公共交叉字符串