哈希
把"一个字符串/对象"压成"一个数",从而能快速比较、去重、查表。字符串哈希:h = h*131 + 字符。
一、互动演示:字符串哈希怎么算
逐个字符把字符串"卷"成一个数(多项式哈希,底 131)。输入一个短串,点“下一字符”。
输入串后点“载入”,再逐字符计算。
二、为什么有用 + STL 偷懒法
typedef unsigned long long ULL; // 自然溢出当取模,省事
ULL myHash(string s){
ULL h = 0;
for (char c : s) h = h * 131 + c; // 多项式哈希
return h;
}
// 统计不同字符串个数:哈希后排序去重
sort(a.begin(), a.end());
int cnt = 1; for (int i = 1; i < n; i++) if (a[i] != a[i-1]) cnt++;
// 偷懒神器:直接用 STL
unordered_map<string,int> mp; mp[s]++; // 平均 O(1)
哈希冲突:不同串可能算出同一个数。竞赛常用"双哈希"或大质数底降低概率。日常用 unordered_map 即可。