前言
本篇文章是在看了CSDN上那些“大佬”们对KMP算法的长篇大论后仍然看不懂,而在Youtube上看了一外国小哥讲解的视频后有所领悟,同时想给广大受苦群众分享外国小哥的讲解而写的文章。
视频源地址https://www.youtube.com/watch?v=GTJr8OvyEVQ
Bilibili搬运附中英字幕https://www.bilibili.com/video/av3246487?from=search&seid=4416876704360741053
外国小哥的Github主页http://github.com/mission-peace/interview/wiki
外国小哥关于KMP算法的Java模板
https://github.com/mission-peace/interview/blob/master/src/com/interview/string/SubstringSearch.java
各位可以直接浏览以上网页去获取直接信息,跳过我写的文章,因为这篇文章主要是把原作者的视频转换成文本。
如果您不想看视频,那么您就可以看看这篇文章,不过我也不建议您这么做,因为从原作者获取信息是最直接的,通过他人获取的原作者的信息也许就变了味儿。
因本人能力有限,不保证文章质量,抱歉!
正文
普通暴力的字符串查询搜索方法
要求是在母串中找到子串,如果找到返回母串所对应子串首字母的下标,如果找不到返回-1等。
如上图所示,text代表母串“abcbcglx”,pattern代表子串“bcgl”,下面人工简单模拟一下暴力算法。
首先定义i,j在text以及pattern的首字母上,然后依次往后匹配。
1、a与b不匹配,i++往后走一位。
2、b与b匹配,i++,j++各往后走一位。
3、c与c匹配,i++,j++各往后走一位。
4、b与g不匹配,i回到匹配开始位置(b)的后一位(c),j回到子串的首字母。
......
以此类推。
时间复杂度
假如母串是“abcabcabcabcabcabcabc...abx”,子串是“abx”,这样每