您的位置:首页 > 编程语言 > Python开发

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

2018-09-13 08:08 281 查看
版权声明:博客为作者平时学习备忘,参考资料已在文尾列出一并表示感谢。如若转载,请列明出处。 https://blog.csdn.net/woai8339/article/details/82682050

给定题目:找出一个字符串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 i<len(S):
if 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、

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: