朴素模式匹配与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、
相关文章推荐
- 模式匹配的KMP算法详解
- 模式匹配的KMP算法详解
- (11)串的模式匹配:朴素的模式匹配算法,KMP算法
- 模式匹配的KMP算法详解
- 字符串的模式匹配详解--BF算法与KMP算法
- KMP算法与朴素模式匹配算法(C语言)
- 字符串模式匹配算法--详解KMP算法
- python2.7通过字典实现java的switch-case模式匹配(代码有注释)
- 字符串的模式匹配---KMP算法详解--个人觉得最nice的KMP算法解析了
- 数据结构20:KMP算法(快速模式匹配算法)详解
- java 中模式匹配算法-KMP算法实例详解
- 【模式匹配】之 —— KMP算法详解及证明
- 对比了一下数据结构上的朴素模式匹配(Brute Force)和KMP算法
- [转]模式匹配的KMP算法详解
- 模式匹配的KMP算法代码
- 模式匹配的KMP算法详解
- 转一篇写的比较好的文章-----模式匹配的KMP算法详解
- 模式匹配的KMP算法详解
- 计算KMP模式匹配算法中next数组的代码分析及改进型KMP算法中nextval数组代码分析
- KMP算法实现字符串的模式匹配完整C代码