Go語言實現kmp演算法(一)

2022-10-11 18:12:09 字數 553 閱讀 3247

kmp演算法分為兩部分,第一部分為next陣列的獲取,第二部分為使用next陣列進行匹配,兩部分採用的思路大體相同。

該演算法有多種方式實現,此處介紹移動的方式實現,還有教科書上的手算方法實現,即計算最大前後子串長度,將next陣列向後一位,首位置為-1,則匹配過程中移動距離等於 = 當前index - index處子串長度。

next陣列的獲取思路已經寫在了注釋中,**如下:

//

go語言

func getnext(p string) int

//剛開始、回溯到了-1 或 正在進行匹配中的子串匹配了

if k == -1 || p[k] ==p[i] else

//此處可以在迴圈體內進行回溯,目的是將k回溯到-1或能讓p[k]與p[i]發生匹配的位置繼續匹配。由於i++的情況只發生在k==-1或發生子串匹配的情況,

// 所以此處就巧妙的變成了乙個回溯邏輯

} else

}return

next

}

如果已經理解了上述邏輯,後續對目標串進行匹配時則非常容易理解

Go語言實現bitmap演算法

有關bitmap演算法的介紹資料網上很多,這裡不贅述,各種語言的實現也不少,但是go語言版的bitmap不多,本文就來寫乙個go版的bitmap實現。首先建立乙個 bitmap.go 檔案,定義乙個bitmap結構體,再提供一些操作方法。詳細 如下 package bitmap import fmt...

KMP演算法詳解(C語言實現)

kmp的演算法分析 kmp解決問題 清除bf演算法中主串s指標出現的回溯情況,即當主串s和子串t在某個字元不匹配的時侯,主串s的指標位置不變,改變子串t的指標位置,使主串和子串的字元匹配 演算法思路 建立乙個next陣列,當出現主串字元與子串字元不匹配時,將模式串t的指標 j 移動到next j 的...

LRU演算法的GO語言實現

lru演算法原理,來自 1.假設我們使用雜湊鍊錶來快取使用者資訊,目前快取了4個使用者,這4個使用者是按照時間順序依次從鍊錶右端插入的 2.此時,業務方訪問使用者5,由於雜湊鍊錶中沒有使用者5的資料,我們從資料庫中讀取出來,插入到快取當中。這時候,鍊錶中最右端是最新訪問到的使用者5,最左端是最近最少...