字串演算法 字串雜湊

2022-10-10 07:24:08 字數 677 閱讀 7837

方法以,m進製的形式來表示乙個字串,那麼這個字串就可以輕鬆計算 i~j 之間的hash值

當只有小寫/大家字母時,m=131 而hash值,可以使用unsigned long long 來表示,這時不再需要求餘

方法應用

字串匹配。思路:對比hash值

允許k次失配的字串匹配 。即:允許k次字元值不對的情況下仍然匹配。思路:使用 雜湊二分來解決

最長回文子串。 順著/倒著計算hash值。設ri為以i為結尾的字串的最長回文子串,則有 ri<=r(i-1)+2;

確定字串中不同子字串的數量。思路:n*n遍歷計算 i:起始點 len 長度 查詢hash值有多少個不一樣,則為結果

核心**

#define nmax 1000005

#define ull unsigned long long

#define magicnum 131

char szstr[nmax];

ull f[nmax];

ull p[nmax];

void inithash(const char* szstr)

}//l/r 都是包含的,但是相較於cpp的index ,此值為 cpp的index+1 (即:從1開始)

ull gethash(int l,int r)

字串 字串雜湊hash演算法

以洛谷p3370為引子引入吧 雜湊其實是所有字串操作中,筆者認為最簡單的操作了 except輸入輸出qwq 雜湊的過程,其實可以看作對乙個串的單向加密過程,並且需要保證所加的密不能高概率重複 就像不能讓隔壁老王輕易地用它家的鑰匙開啟你家門一樣qwq 通過這種方式來替代一些很費時間的操作。比如,最常見...

雜湊 字串雜湊演算法

給定乙個長度為n的字串,再給定m個詢問,每個詢問包含四個整數l1,r1,l2,r2,請你判斷 l1,r1 和 l2,r2 這兩個區間所包含的字串子串是否完全相同。字串中只包含大小寫英文本母和數字。輸入格式 第一行包含整數n和m,表示字串長度和詢問次數。第二行包含乙個長度為n的字串,字串中只包含大小寫...

Hash 字串 字串雜湊

luo gu luogu luogup 3370 p3370 p337 0如題,給定n個字串 第i個字串長度為mi,字串內包含數字 大小寫字母 請求出n個字串中共有多少個不同的字串。第一行包含乙個整數n,為字串的個數。接下來n行每行包含乙個字串,為所提供的字串。輸出包含一行,包含乙個整數,為不同的字...