字串匹配演算法 Sunday

2021-10-12 23:05:24 字數 1199 閱讀 2589

以往不論是上課還是各種資料書上,看到關於字串匹配的演算法,大抵都是kmp了。然而kmp的next陣列理解起來頗為費勁,且容易忘記。在leetcode刷題中偶然發現了乙個叫sunday的演算法,不僅容易理解,且經過其他博主測評,sunday的效率還要高於kmp演算法,因此本文記錄一下sunday演算法的思路。

sunday 解法

kmp、bm、sunday、horspool、strstr字串匹配演算法的效能比較

首先briefly陳述一下問題

即獲得模式串第一次在目標字串**現的位置。

sunday演算法的思想是:

目標字串中提取和模式串相同長度的待匹配字串,並判斷該待匹配字串是否與模式串一致;

若一致,則返回當前待匹配字串開始的索引即可;

若不一致,那麼對待匹配字串的下乙個字元 進行分析,判斷它是否出現在模式串中;

若出現了,那麼將模式串右移,直到該字元模式串中最後一次出現的位置和目標字串中該字元對齊,並進行下一輪迭代;

若沒有出現,那麼將模式串右移,模式串的第乙個字元移動到待匹配字串的下乙個字元 的下乙個字元,並進行下一輪迭代;

出於不侵權考慮, 關於示意圖請看:

該題c++**:

class

solution

// 開始匹配

for(

int i =

0; i < haystack.

size()

;)}if

(is_fit)

else

if(pianyi.

count

(haystack[i+needle.

size()

])==0

)else}}

return-1

;}};

字串匹配 sunday演算法

原題 lintcode題目 字串查詢 又稱查詢子字串 是字串操作中乙個很有用的函式。你的任務是實現這個函式。對於乙個給定的 source 字串和乙個 target 字串,你應該在 source 字串中找出 target 字串出現的第乙個位置 從0開始 如果不存在,則返回 1。字串匹配最常見的就是km...

字串匹配sunday演算法

在網上看到了一種比kmp和bm演算法還快字串匹配演算法,就看了一下,並且發現一些部落格上寫的 是錯誤的,於是我也寫了乙個,leetcode上測試通過。首先對sunday演算法進行一下講解 從別的地方複製過來的,講的確實不錯 好了,sunday演算法還真的很好理解,用下面的例子來說明吧 j k t h...

字串匹配 Sunday演算法

字串匹配演算法中最先學的演算法是暴力演算法,緊接著是kmp演算法,到現在依舊沒有理解next到底是怎麼求的 尋找到了一種新的演算法 sunday演算法,比kmp演算法更快 匹配時關注匹配主串中參與匹配的最後一位字元的下一位字元。參考 include includeusing namespace st...