当前位置: 首页 > news >正文

字符串哈希

字符串哈希

双哈希封装

随机质数列表:1111111121、1211111123、1311111119。

const int N = 1 << 21;
static const int mod1 = 1E9 + 7, base1 = 127;
static const int mod2 = 1E9 + 9, base2 = 131;
using U = Zmod<mod1>;
using V = Zmod<mod2>;
vector<U> val1;
vector<V> val2;
void init(int n = N) {val1.resize(n + 1), val2.resize(n + 2);val1[0] = 1, val2[0] = 1;for (int i = 1; i <= n; i++) {val1[i] = val1[i - 1] * base1;val2[i] = val2[i - 1] * base2;}
}
struct String {vector<U> hash1;vector<V> hash2;string s;String(string s_) : s(s_), hash1{1}, hash2{1} {for (auto it : s) {hash1.push_back(hash1.back() * base1 + it);hash2.push_back(hash2.back() * base2 + it);}}pair<U, V> get() { // 输出整串的哈希值return {hash1.back(), hash2.back()};}pair<U, V> substring(int l, int r) { // 输出子串的哈希值if (l > r) swap(l, r);U ans1 = hash1[r + 1] - hash1[l] * val1[r - l + 1];V ans2 = hash2[r + 1] - hash2[l] * val2[r - l + 1];return {ans1, ans2};}pair<U, V> modify(int idx, char x) { // 修改 idx 位为 xint n = s.size() - 1;U ans1 = hash1.back() + val1[n - idx] * (x - s[idx]);V ans2 = hash2.back() + val2[n - idx] * (x - s[idx]);return {ans1, ans2};}
};

前后缀去重

sample please ease 去重后得到 samplease

string compress(vector<string> in) { // 前后缀压缩vector<U> hash1{1};vector<V> hash2{1};string ans = "#";for (auto s : in) {s = "#" + s;int st = 0;U chk1 = 0;V chk2 = 0;for (int j = 1; j < s.size() && j < ans.size(); j++) {chk1 = chk1 * base1 + s[j];chk2 = chk2 * base2 + s[j];if ((hash1.back() == hash1[ans.size() - 1 - j] * val1[j] + chk1) &&(hash2.back() == hash2[ans.size() - 1 - j] * val2[j] + chk2)) {st = j;}}for (int j = st + 1; j < s.size(); j++) {ans += s[j];hash1.push_back(hash1.back() * base1 + s[j]);hash2.push_back(hash2.back() * base2 + s[j]);}}return ans.substr(1);
}
http://www.hskmm.com/?act=detail&tid=38060

相关文章:

  • 1024程序员节福利!参与互动,5分钟赢好礼!
  • 马拉车
  • 常见结论与例题
  • 单芯片方案分享-CH336F-USB拓展坞+百兆网卡+读卡器+100W快充芯片
  • 常用例题
  • 实验报告3
  • 2025年真空烧结炉厂家权威推荐榜:真空热处理设备、高温烧结炉、工业窑炉技术实力与市场口碑深度解析
  • 取模类
  • 2025年环评公司权威推荐排行榜,环评手续,环评报告,环评验收,专业高效服务助力企业合规发展
  • 2025年棒球帽厂家推荐排行榜,运动棒球帽,时尚棒球帽,定制棒球帽,防晒棒球帽公司精选榜单
  • 于状压的线性 RMQ 算法
  • Flink编程模型 - 详解
  • 服务器关机用halt、poweroff还是shutdown -h now?一文帮你说明
  • KD Tree
  • ST 表
  • 小波矩阵树:高效静态区间第 K 大查询
  • Seata用法
  • 分数运算类
  • 撸一个功能强大的基于语义的图像检索系统
  • 提交一张 PPT,参与 RTE2025 全球语音智能体云展示
  • 解释 EIP-4337
  • 数论常见结论及例题
  • 求解连续数字的正约数集合——倍数法
  • git回滚代码
  • 组合数
  • q
  • 裴蜀定理
  • 逆元
  • 扩展欧几里得 exgcd
  • 离散对数 bsgs 与 exbsgs