字符串匹配算法——Sunday

字符串匹配算法——Sunday

听到字符串匹配,咱们第一想到的是经典的KMP算法,为何会是它,由于它实在是太经典了。可是咱们今天要讲的是另外一个算法,Sunday算法,比KMP还要快的字符串匹配。python

假设
匹配串src\(\quad\)abcabdaababcbab
模式串des\(\quad\)babcb算法

设匹配串的游标为i,模式串游标为j,模式串当前位于匹配串位置pos
src[i] != des[j]时,看abcabdaababcbab中的d,在模式串中不存在d,因此pos += len(des),变到d后面的a的位置,j=0函数

此时:spa

abcabdaababcbabcode

\(\ \ \ \ \ \ \ \ \ \ \\)babcb字符串

再看c是否存在于des,存在。从右向左找到des中第一个与c匹配的位置,并将des与之对其:class

abcabdaababcbabwhile

\(\quad\quad\quad\\)babcbco

本例完成匹配。字符

Python代码以下:

def sunday(src, des):
    len_src = len(src)
    len_des = len(des)
    pos = 0
    while pos < len_src - len_des + 1:
        i = pos
        j = 0
        # print src[i:]
        # print des
        for j in range(0, len_des):
            if src[i] != des[j]:
                if src[pos+len_des] in des:
                    pos += len_des
                    break
                else:
                    index = des.rfind(src[pos+len_des])
                    pos += (len_des-index)
                    break
            else:
                i += 1
                j += 1
        if j == len_des:
            return True
    return False


def main():
    src = "abcdaajisdfhcbbasbebbbsaecabbadd"
    des = "bsaeca"
    print sunday(src, des)

其实在Python里有内建的函数搞定字符串匹配:

print des in src
相关文章
相关标签/搜索