字符串匹配算法——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
相關文章
相關標籤/搜索