基礎資料結構之雜湊題型

2021-10-19 08:50:14 字數 929 閱讀 3955

acwing 137. 雪花雪花雪花

乙個雪花有多種表現形式,我們讓它的某種特定形式與整數之間建立雜湊;之後對每乙個雪花重複此操作,得到乙個雜湊表。判斷兩個雪花是否相同時,看它的雜湊值是否相同就可以了。

acwing 138. 兔子與兔子(模板題)

套用這個模板,我們可以求得字串中,任意乙個子串的雜湊。

步驟是先求字串的字首(字尾)hash(特別要注意求字首的方法,乙個規模小的字首是如何推到規模大的字首的:h[i] = h[i - 1] * base + s[i] - 『a』 - 1)。有了字首hash值之後,可以求得任意子串s[l – r]的hash值:h[l – r] = h[r] - h[l - 1] * p[r - l + 1] (p陣列存的是base的「下標」次方)。

再遇到類似比較兩個字串是否相等,或者兩個字串的任意子串是否相等的問題,就可以轉化為比較兩個字串雜湊值是否相等的問題。前者暴力比較是o(len),而後者只需要o(1)。我做過的另兩個題中,都與二分配合使用;使用此方法時,可以考慮一下二分。

acwing 139. 回文子串的最大長度

回文串問題,我們可以轉換為列舉中點,然後看中點左邊和右邊的公共子串最大長度是多少的問題。列舉中點是o(n),求公共子串的時候可以列舉長度來找最大長度,查詢最大長度可以用二分查詢,時間複雜度是o(log n)。

acwing 140. 字尾陣列

這個題的思路不難,還是用雜湊,但是要注意不能用substr求子串,會超時;用map還會空間溢位。

寫**使要注意如何寫快速排序的cmp函式。因為不能求子串,所以我們可以用二分查詢,找出兩個字串的公共字首(題目也是讓你求公共字首),然後再比較第乙個不同的元素就可以了。矩陣

字串雜湊的二維應用。

類似於字串字首的遞推方法,如果我們知道了某乙個a行b列的矩形的面積,在它下一行的a行b列的矩形面積是可以推導出來的。

基礎資料結構之佇列題型

佇列是一種先進先出的資料結構。蚯蚓 雙端佇列 單調佇列顧名思義,和單調棧一樣,儲存一堆單調遞增的資料。不同的是,單調佇列需要從最前面的元素開始操作,單調棧需要從最後面的元素進行操作。最大子序和 經典題型 題目讓求連續的序列和,多半要用到字首和。使用字首和,問題就轉化成了對於位置i,求出最小字首和s ...

資料結構之雜湊

題目1 實現乙個簡單的雜湊結構 使用youlookdeliciousc的做法,即用拉鍊表來實現。技巧是vector來做為容器 struct node int len 1000 class myhashmap void put int key,int value pre cur cur cur nex...

資料結構之雜湊例程

int hash const string key,int tableszie int hash const string key,int tablesize a hash routine for string objects.int hash const string key,int tables...