sunday演算法 玄學字串匹配

2022-05-29 04:18:13 字數 830 閱讀 9018

和kmp相似,用於字串的匹配,貌似平均複雜度比kmp快,也比kmp更好理解。

大概意思是:

如果串b被串a包含,那麼串a此時與串b匹配的部分一定一樣

所以如果從開頭開始匹配到不同處時,在a串找中此時a串中對應的b串末尾下一位最靠右出現的位置,記作m

如果找不到,直接跳過這一段(顯然無法在這一段裡找到答案)

如果找到,就讓b串中這個位置與m對齊

大概是這麼乙個意思:

step1:比較至第二位時發現失配,比較兩個染色位置的字元,發現相同

step2:將t字元從左往右數的第乙個與s[4]相同的字元移至s[4]的下面,這樣可以保證不會錯過匹配項。(相關資訊已存在asc陣列中)。 

以此類推,不斷比較。

大概就是這個意思

#include#include

#include

#include

using

namespace

std;

char a[1000010],b[10010

];int la,lb,asc[256

];void

sunday()

if(i+lb>=la) return

; i+=asc[a[i+lb]];

}return;}

intmain()

字串匹配 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...