朴素模式匹配与KMP算法详解(附上Python代码)

给定题目:找出一个字符串S中的子串T并输出起始位置,如果有多个起始位置,输出最小位置。
解法一:
思路:从字符串S开始遍历,如果遍历到字符串S[i:i+len(T)]与字符串T相等,那么即可输出起始位置。如果遍历到字符串尾,仍然没有找到,那么没有最小位置,输出None。
上代码:

"""
@:param朴素字符串匹配算法
题目:两个字符串S和T,假设T是子串,找出该子串在S中的位置。
思想:先用子串的第一个位置字符进行比较,匹配S中的第一位,T(2)匹配S(2)......如果有
一位没有匹配上,终止匹配,从T中的第二位开始匹配。
"""
def string_compare(S, T):
    i = 0
    index = None
    is_exists = False
    while iif T == S[i:i+len(T)]:
            is_exists = True
            index = i
            break
        else:
            i = i+1
    return is_exists, index

if __name__ == '__main__':
    S = "googgoogle"
    T = "google"
    is_exists, index = string_compare(S,T)
    print(is_exists, (str(index)+":"+str(index+len(T))))
这个是一次次比较,有没有更简单的方法呢,答案肯定给的,KMP算法。
可能会问,什么是KMP算法哇。我们一步步看匹配情况。

Ref:
1、《大话数据结构》
2、

你可能感兴趣的:(python,数据结构)