精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

徹底理解字符串匹配KMP算法

開發 前端
如果下一個字符相同,那么當前位置next數組的值就是n+1。而如果下一個字符不相同,我們繼續查找next[n-1],然后前一個指針回退,繼續比較下一個位置即可。

大家好,我是小風哥,今天簡單聊聊字符串匹配kmp算法。

字符串匹配是計算機科學中非?;A的操作,給定兩個字符串a和b,我們需要判斷字符串a是否包含字符串b。

圖片圖片

像你我這樣的普通程序員能想到的最簡單方法是這樣的,用字符串b不斷去匹配每個主串中的子串。

假設給定這樣兩個字符串:

圖片圖片

首先從主串的第一個位置和子串的第一個位置去匹配,我們發現A和B不相同:

圖片圖片

因此主串指針后移一位,子串重新從最第一個字符開始匹配。

圖片圖片

這時我們發現A和C不同,因此匹配失敗。

圖片圖片

主串指針回退到第三個字符,子串重新從第一個字符開始匹配。

圖片圖片

此時B和A又不同,重復上述過程。

這次成功找到多個相同的字符,但最后一個字符匹配失?。?/p>

圖片圖片

按照我們的算法,主串指針需要回退到第5個字符重新匹配。

圖片圖片

這就是你我這種肉體凡胎能想到的算法,時間復雜度是O(mn),效率低下的原因當然是主串指針需要回退。

然而有三位大神不是這么想的,它們跳出來凡人的思考方式發明了一種極具創意的算法,由于是三個人同時發現,因此這個算法取了三人名字的首字母,這就是著名的kmp算法。

圖片圖片

看到這里相信你就能明白為什么這個算法很難掌握了吧,難是正常的,覺得不難才不正常,如果你能無師自通搞定kmp算法,那么早出生幾十年你也能和大師們并駕齊驅供我等凡夫俗子瞻仰。

廢話不多說,接下來就讓我們領略一下大師的非凡境界。

注意看這個主串指針,大師們思考的第一個問題就是,主串指針是否有必要回退,這是最關鍵最核心的問題。

圖片圖片

讓我們回到剛才部分匹配的示例。

主串指針是否需要需要回退呢?我們思考兩種可能。

第一種可能,即使能匹配成功,匹配成功的起始位置也在主串指針H及以后,在這種情況下主串指針不需要回退。

圖片圖片

第二種可能,匹配成功的起始位置經過主串指針H:

圖片圖片

在這種情況下,主串指針之前的兩個字符A和B一定是成功匹配了的:此時我們只需要比較主串指針H及以后的位置即可。

圖片圖片

只有這么兩種可能。

因此可以看到,主串指針根本就沒有必要回退。

現在我們知道了主串指針不需要回退,那么子串指針該從哪里開始匹配呢?從頭開始嗎?

圖片圖片

注意看我們剛才提到的第二種可能,匹配成功的起始位置經過主串指針H,在這種情況下,主串指針之前的兩個字符A和B一定是成功匹配了的,這意味著什么呢?

圖片圖片

這意味著AB是這個字符串的后綴:

圖片圖片

AB是這個字符串的前綴:

圖片圖片

不要忘了這兩個字符串是成功匹配了的:

圖片圖片

也就是說這是兩個完全相同的字符串,這就意味著AB是成功匹配字符串的相同前后綴。

圖片圖片

這樣子符串指針也不需要回退到起始位置,而是從共同前后綴的下一個位置開始匹配即可。

圖片圖片

而對于部分匹配的子串根本不存在共同前后綴的情況,

圖片圖片

我們直接從子串起始位置進行匹配。

圖片圖片

可以看到,由于主串指針不回退,這大幅提高了算法的效率。

想要實現這樣的算法,關鍵是怎樣計算出部分匹配子串的共同前后綴。

因此我們來到了第二個核心問題。

我們以ABCDAB為例來講解。

這是長度為1的前后綴,這是長度為2的前后綴,以此類推。

圖片圖片

可以看到,在所有的前后綴中,相同前后綴的最大長度是2。

圖片圖片

我們記下來。

實際上我們需要把所有子串的相同前后綴都計算出來。

對于ABCDA這個子串來說,相同前后綴長度是1,因為兩個A是相同前后綴。

圖片圖片

而對于ABCD這個子串來說,相同前后綴的長度是0,也就是沒有相同的前后綴。

其它也一樣。

這樣我們就到了一個數組,通過查找這個數組我們能知道任意子串的共同前后綴長度。

圖片圖片

這個數組在很多資料中被稱之為next數組。

有了next數組就簡單了。

假設此時我們發現兩個指針指向的字符不同,接下來只需要簡單查找next數組:

圖片圖片

發現已匹配部分的相同前后綴長度是2:

圖片圖片

因此主指針不動,子串指針移動到相同前后綴的下一個位置繼續去匹配即可。

圖片圖片

可以看到,只要我們能得到next數組,就可以在線性時間復雜度內解決問題。

這里,我們來到了第三個核心問題,那就是該怎樣高效計算出next數組。

假設此時我們已經計算出了這個子串的共同前后綴,也就是長度為n的這兩個部分。

圖片圖片

接下來計算下一個位置的最長前后綴,我們只需要分別后移兩個指針,然后比較字符是否相等,這里有兩種可能。

第一種可能是接下來的字符相同,那么這個子串的最長相同前后綴的長度就是n+1。

圖片圖片

然后寫到next數組即可,這很好理解。

圖片圖片

但是如果下一個位置的字符不相等該怎么辦呢?

注意接下來是整個算法最核心的,也是最具技巧的地方。

如果接下來的兩個字符不相等,那么前面的這部分絕無可能形成最長前后綴。

圖片圖片

因此我們只能找一個更短的。

圖片圖片

如果能找到一個更短的,這就意味著這兩部分會形成一個共同前后綴。

圖片圖片

然后我們繼續比較下一個字符就可以了,這就回到最初的問題。

那么這兩部分相同意味著什么呢?

不要忘了紅色部分是我們之前找到一個共同前后綴,也就是說紅色部分的子串完全相同。

圖片圖片

而現在這兩個子串也相同,這就意味著這兩個更小的子串其實是紅色部分子串的最長前后綴。

圖片圖片

不要忘了,此時我們的指針已經來到了這里,前面這部分的next數組已經計算出來了。

圖片圖片

通過查next數組,我們可以快速得到更短前后綴的長度。

既然紅色部分的長度是n,那么更短前后綴的長度其實就是next[n-1]。

圖片圖片

再來看下,紅色部分的長度是n,那么更短前后綴的長度是next[n-1]。

也就是這個位置。

圖片圖片

這就是計算next數組源代碼中n=next[n-1]這句話的含義。

圖片圖片

現在我們再來看一遍整個過程。

此時兩個字符的長度不等,那么我們只需要簡單查一下next[n-1]:

圖片圖片

這就是更短的前后綴長度,假設是4。

圖片圖片

此時前一個指針回退到位置4,繼續比較下一個字符即可。

圖片圖片

如果下一個字符相同,那么當前位置next數組的值就是n+1。

而如果下一個字符不相同,我們繼續查找next[n-1],然后前一個指針回退,繼續比較下一個位置即可。

圖片圖片

這就是完整的kmp算法實現,可以看到整個代碼實際上只有30多行。

如果你能在50多年前寫出這幾行代碼,你也能和它們并列,在計算機科學史上會留下你的一筆。

圖片圖片

好啦,以上就是本期全部內容。

責任編輯:武曉燕 來源: 碼農的荒島求生
相關推薦

2013-05-06 10:54:08

字符串字符串匹配KMP算法

2014-10-30 14:19:13

本文由簡單的字符串匹配

2010-03-18 08:59:29

JVM字符串JVM常量池

2011-06-22 10:45:19

JAVA

2023-04-11 08:54:57

字符串匹配算法

2023-12-15 10:27:01

暴力匹配算法Python字符串

2013-05-06 10:49:21

Boyer-Moore算法字符串匹配

2009-08-07 14:46:59

C#匹配字符串

2021-09-03 09:41:36

字符串時間復雜度

2009-11-18 12:38:04

PHP字符串函數

2023-02-26 22:33:32

字符串排列算法

2016-12-30 13:32:24

字符串算法代碼

2011-03-15 15:20:46

2024-03-04 15:05:37

2018-11-30 10:00:53

Python字符串編程語言

2024-06-26 07:58:06

2016-12-30 13:16:51

字符串算法代碼

2009-09-02 13:41:57

C#字符串操作

2009-08-11 10:26:49

C#算法C#字符串反轉

2021-09-10 08:31:54

翻轉字符串單詞
點贊
收藏

51CTO技術棧公眾號

人妻有码中文字幕| 国产精品久久一区| 国产视频久久久久久| 在线免费av资源| 国产欧美日韩激情| 444亚洲人体| 青青国产在线观看| 93在线视频精品免费观看| 亚洲精品一区二区三区影院| 人妻无码视频一区二区三区 | 26uuu精品一区二区| 国产精品视频yy9099| 国产一级av毛片| 欧美日韩中文一区二区| 亚洲精品一区二区三区蜜桃下载| 黄色一级二级三级| 国产一线二线在线观看| 国产欧美日韩中文久久| 高清av免费一区中文字幕| 波多野结衣家庭主妇| 一区三区视频| 久久精品国产一区二区三区| av网站有哪些| 91蝌蚪精品视频| 欧美美女网站色| 国产一区亚洲二区三区| √天堂8资源中文在线| 国产精品国产三级国产aⅴ入口| 精品国产免费一区二区三区| 国产男女猛烈无遮挡| 日韩在线播放一区二区| 97色伦亚洲国产| 黄色一级免费视频| 99久久激情| 亚洲人成电影在线播放| 粉嫩av懂色av蜜臀av分享| 精品入口麻豆88视频| 91国产成人在线| 男人天堂网视频| av在线视屏| 一区二区三区日韩在线观看| 亚洲巨乳在线观看| 黄色毛片在线看| 99久久国产综合精品女不卡| 91原创国产| 国产深喉视频一区二区| 精久久久久久久久久久| 国产精品视频色| 成人免费视频国产免费| 亚洲欧美日韩一区在线观看| 性亚洲最疯狂xxxx高清| 精品视频在线观看免费| 午夜久久黄色| 欧美日韩成人免费| 色在线观看视频| 亚洲成av人片乱码色午夜| 色偷偷综合社区| 青青操在线播放| 亚州av乱码久久精品蜜桃| 色婷婷av一区二区三区久久| 欧美乱大交做爰xxxⅹ小说| 欧美日韩国产一区二区三区不卡| 国产午夜精品视频免费不卡69堂| 成人免费网站黄| 怕怕欧美视频免费大全| 亚洲桃花岛网站| 欧洲性xxxx| 99精品国产一区二区三区| 日韩少妇与小伙激情| 无码人妻精品一区二区三区夜夜嗨| 婷婷综合伊人| 蜜月aⅴ免费一区二区三区| 国产一区二区播放| 欧美在线首页| 久久久久久久久久久网站| 青青草av在线播放| 久久久蜜桃一区二区人| 国产精品国语对白| 国产精品久久久久久久久久久久久久久久久久 | 亚洲三级电影网站| 日本黄色片一级片| 秋霞伦理一区| 欧美在线观看视频一区二区| 三区视频在线观看| 亚洲精品v亚洲精品v日韩精品| 亚洲国产成人精品久久| 国产色视频一区二区三区qq号| 精品99在线| 久久成人精品视频| 天海翼一区二区| 日本午夜精品视频在线观看 | 亚洲欧洲日韩av| 国产玉足脚交久久欧美| 性欧美1819sex性高清| 欧美高清性hdvideosex| 四季av综合网站| 欧美色爱综合| 国模gogo一区二区大胆私拍| 国产情侣小视频| 国产成人福利片| 欧美日韩一区二区视频在线观看| 欧美jizzhd欧美| 精品人伦一区二区三区蜜桃免费| 中国黄色片免费看| 国产另类在线| 少妇av一区二区三区| 成年人免费看毛片| 麻豆国产精品视频| 国产一区国产精品| 免费av不卡| 一本大道久久a久久综合| 婷婷激情综合五月天| 美女精品一区最新中文字幕一区二区三区 | 国产黄色免费在线观看| 一级做a爱片久久| www.天天射.com| 嫩草国产精品入口| 久久久精品久久久久| 日韩精品成人免费观看视频| 国产精品一卡二卡在线观看| 日韩免费毛片| 一区二区乱码| 精品日韩av一区二区| 成年人免费视频播放| 久久不射中文字幕| 操人视频欧美| 国产三区视频在线观看| 在线看日韩精品电影| 少妇一级淫片免费放播放| 一区二区三区四区在线观看国产日韩| 奇米4444一区二区三区| 亚洲成人一级片| 亚洲丝袜制服诱惑| 国产福利在线免费| 国产精品一区二区av交换| 亚洲91精品在线观看| 国产黄色av网站| 国产精品白丝在线| 爱情岛论坛亚洲首页入口章节| 色爱综合av| 国内精品视频久久| 国产成人无码www免费视频播放| 最近中文字幕一区二区三区| 日本不卡一区在线| blacked蜜桃精品一区| 日本亚洲欧洲色| 男男激情在线| 色哟哟一区二区在线观看| 少妇饥渴放荡91麻豆| 99精品99| 久久亚洲综合网| 久久影院午夜精品| 日韩av一区在线观看| 国产乡下妇女做爰视频| 成人网在线播放| 精品国产一区二区三区无码| 国产美女撒尿一区二区| 午夜精品一区二区三区av| 日本人妻丰满熟妇久久久久久| 亚洲精品成人悠悠色影视| 中文字幕欧美视频| 亚洲一级网站| 激情伦成人综合小说| 欧美xxxhd| 亚洲丝袜一区在线| 一起草av在线| 亚洲综合网站在线观看| 日韩无码精品一区二区| 国产精品久久久久久久免费软件 | 亚洲精品欧洲| 久久99九九| 久久久成人av毛片免费观看| 在线看欧美日韩| 91成品人影院| 亚洲一二三区不卡| 日本xxx在线播放| 日本特黄久久久高潮| 自拍偷拍一区二区三区| 日韩精品中文字幕吗一区二区| 国内自拍欧美激情| 欧美少妇另类| 欧美精品色综合| 日韩免费一二三区| 日本一区二区三区在线观看| 亚洲天堂国产视频| 亚洲人人精品| 亚洲国产精品日韩| 97人人澡人人爽91综合色| 欧美最顶级丰满的aⅴ艳星| av资源种子在线观看| 欧美一区二区久久| 日韩av大片在线观看| 亚洲国产精品99久久久久久久久| 中文字幕剧情在线观看| 999亚洲国产精| 一本一本a久久| 卡通动漫精品一区二区三区| 国产精品一区二区三区免费视频 | 波多野结衣a v在线| 久久国产精品99久久人人澡| 国产日韩av网站| 久久在线播放| 久久久婷婷一区二区三区不卡| 久久久精品一区二区毛片免费看| 久久久久久久久久久久久久久久久久av | 亚洲欧美日韩第一区| 国产乱淫片视频| 色综合天天性综合| 久久精品99国产精| 欧美激情中文字幕一区二区| 中文在线观看免费视频| 精品一区二区三区视频| 北条麻妃在线观看| 欧美成人国产| 一区精品视频| 国产亚洲电影| 精品国产乱码久久久久久88av| 高清一区二区中文字幕| 国产成人精品一区二区在线| a天堂资源在线| 美女性感视频久久久| 98在线视频| 亚洲社区在线观看| 男人的天堂a在线| 91精品久久久久久久99蜜桃 | 九九色在线视频| 色先锋资源久久综合5566| 四虎在线免费看| 日韩一级片网站| 91麻豆国产视频| 欧美视频一区二区三区四区| wwwwww国产| 亚洲成在线观看| 免费一级a毛片夜夜看| 国产精品第一页第二页第三页| 蜜臀久久99精品久久久久久| 97aⅴ精品视频一二三区| 97人妻精品一区二区三区免费| 国产在线播放一区二区三区| 国产一伦一伦一伦| 免费成人小视频| 九色91popny| 日韩精品电影在线| 人妻无码视频一区二区三区| 久久久人人人| 国产极品粉嫩福利姬萌白酱| 99国产精品久久久久久久成人热 | 日本不卡一区二区| 日韩毛片在线免费看| 久久国产88| 成人一区二区三| 蜜桃视频在线观看一区二区| xx欧美撒尿嘘撒尿xx| 日本91福利区| 九九热免费在线观看| 国产综合成人久久大片91| 中文字幕一区二区在线观看视频| 精品一区二区三区在线播放| 欧美色图校园春色| 国产99精品在线观看| 亚洲欧美日韩偷拍| 久久综合九色欧美综合狠狠| 午夜理伦三级做爰电影| 国产日产欧美一区二区视频| 欧美激情视频二区| 日韩理论在线观看| 欧美 日韩 国产 一区二区三区| 亚洲主播在线观看| 好吊妞视频一区二区三区| 色偷偷成人一区二区三区91| 欧美日韩 一区二区三区| 欧美日韩一本到| av小说天堂网| 日韩av在线精品| 国产视频二区在线观看| 日韩专区中文字幕| 青草在线视频| 欧美做受高潮电影o| 国产伊人久久| 不卡视频一区| 国产探花在线精品| 亚洲免费视频播放| 一二三区精品| 中文字幕22页| 北条麻妃一区二区三区| 免费污网站在线观看| 亚洲人成精品久久久久| 在线观看亚洲天堂| 欧美日韩一级二级三级| 黄色一级大片在线免费看国产一 | 欧美成人乱码一区二区三区| 青青视频在线观| www.日韩不卡电影av| 国产蜜臀一区二区打屁股调教| 日韩女优人人人人射在线视频| 欧美天堂在线| 精品视频在线观看| 日韩成人三级| 精品无码一区二区三区爱欲| 蜜乳av一区二区| 污污内射在线观看一区二区少妇| 国产精品久久久爽爽爽麻豆色哟哟 | 国产精品高潮在线| 日韩视频在线直播| 日韩在线观看电影完整版高清免费| 欧美精选一区| 亚洲xxxx2d动漫1| kk眼镜猥琐国模调教系列一区二区| 人妻精品久久久久中文| 午夜伦欧美伦电影理论片| 一区二区三区免费在线视频| 亚洲国产精久久久久久 | 一个色综合久久| aaa亚洲精品| www.色小姐com| 欧美日韩一区二区三区四区| 凸凹人妻人人澡人人添| 蜜臀久久99精品久久久无需会员 | 午夜一区二区三区| 99pao成人国产永久免费视频| 午夜激情影院在线观看| 欧美激情一区二区三区在线| 久久一区二区三区视频| 欧美xxxx在线观看| 国产视频中文字幕在线观看| 国产精品久久久久久久久久东京 | 一级毛片精品毛片| 一区二区三区四区五区精品| 久久婷婷av| 星空大象在线观看免费播放| 一区二区三区久久久| 国产一区二区自拍视频| 中文字幕欧美精品日韩中文字幕| 天堂av中文在线观看| 国产日韩一区二区三区| 欧美精品黄色| 亚欧美一区二区三区| 中文字幕在线观看不卡视频| 91黑人精品一区二区三区| 精品小视频在线| 欧美aaaaa性bbbbb小妇| 国产不卡一区二区三区在线观看| 亚洲一级淫片| 国内自拍第二页| 自拍偷拍国产精品| 国产美女精品视频国产| 久久九九全国免费精品观看| 亚洲三级在线| 在线观看成人免费| 国产一区二区三区四区五区入口| 欧美做爰啪啪xxxⅹ性| 91精品国产综合久久国产大片| 日本在线观看视频| 成人av资源在线播放| 91精品综合久久久久久久久久久 | 99在线精品视频免费观看软件| www.久久久久久.com| 日韩成人免费av| 艳母动漫在线观看| 国产盗摄女厕一区二区三区| 久久精品一区二区三| 欧美精品一区二区在线播放| av中文字幕电影在线看| 国产精品我不卡| 翔田千里一区二区| 中文字幕免费视频| 欧美日韩一二三区| 中文字幕有码在线视频| 国产欧美一区二区三区不卡高清| 亚洲美女色禁图| 变态另类ts人妖一区二区| 欧美裸体一区二区三区| 1769免费视频在线观看| 国产一区二区高清不卡 | 日本特黄在线观看| 五月激情综合婷婷| 福利成人在线观看| 成人久久久久久久| 亚洲精品女人| 国产美女网站视频| 精品国精品自拍自在线| 亚洲欧美小说色综合小说一区| 亚洲国产精品毛片| 国产高清在线精品| 狠狠人妻久久久久久综合| 日韩亚洲国产中文字幕| 亚洲国产精品免费视频| 亚洲国产精品久久久久爰色欲| 亚洲欧洲三级电影| 日本一区高清| 91在线短视频| 日产国产欧美视频一区精品| 免费在线观看国产精品| 一区二区在线视频| 97久久综合区小说区图片区| 向日葵污视频在线观看| 午夜电影久久久| a视频在线播放| 日本一区视频在线播放| 成人午夜电影久久影院|