背景
在平時的項目中,幾乎都會用到比較兩個字符串時候相等的問題,通常是用==或者equals()進行,這是在數據相對比較少的情況下是沒問題的,當數據庫中的數據達到幾十萬甚至是上百萬千萬的數據需要從中進行匹配的時候,傳統的方法顯示是不行的,影響匹配的效率,時間也會要很久,用戶體驗很差的,今天就要介紹一種字符串匹配的算法Sunday。接下來就詳細介紹了
Sunday算法是Daniel M.Sunday於1990年提出的字符串模式匹配。其核心思想是:在匹配過程中,模式串發現不匹配時,算法能跳過盡可能多的字符以進行下一步的匹配,從而提高了匹配效率。相比於另外幾個著名的字符串匹配算法,KMP以及BM算法而言,Sunday算法不僅理解起來比較容易,而且往往能有更好的速度。
首先i,j兩個指針指示的位置(也就是從頭開始匹配),當發現失配的時候就判斷子串的后一位在母串的字符即空格(k標記處)是否在子串中存在?如果存在則將該位置和子串中的該字符對齊,在從頭開始匹配。如果不存在就將子串向后移動,和母串k+1處的字符對齊,再進行匹配。重復上面的操作直到找到,或母串被找完結束。
如上圖,這次比較還是失配,但是k位置的e在子串中出現了,而且第一個就是,最后一個也是,這時候一定要將子串中靠后出現的e和母串中的e對齊如下圖。
再從i,j開始進行比較。。。。。
代碼如下