先声明,本人菜鸟一个,写博客是为了记录学习的过程,以及自己的理解和心得,可能有的地方写的不好,希望大神指出。。。
抛出问题
给定一个文本串test_str(被匹配的字符串)和模式串pat_str(需要从文本串中匹配的字符串),从文本串test_str中找出模式串pat_str第一次出现的位置,没有的话返回 -1
暴力方式
在说kmp之前,我们先来讲下“暴力方式“,也就是说我们最原始的方法。
text_str = 'asdabcdace'pat_str= 'abcdace'
defstr_match(text_str,pat_str):for i inrange(0,len(text_str)):
j= 1
while j
break #匹配失败,直接跳出循环,i+1,继续从第一个字符匹配
j += 1 #匹配成功就继续匹配下一个字符,知道pat_str每个字符都匹配完
if j ==len(pat_str):returnireturn -1
print(str_match(text_str,pat_str))
之所以称之为暴力解法,就是因为每次匹配失败之后就将模式串,向后移动一位,从头开始匹配,一直循环下去。造成时间复杂度高,kmp也就是优化这个地方,每一次匹配失败,下次移动的距离next值