博客
关于我
字符串哈希-Isomorphic Strings-CF985F
阅读量:368 次
发布时间:2019-03-04

本文共 1525 字,大约阅读时间需要 5 分钟。

为了解决这个问题,我们需要判断两个子串是否是等价的。具体来说,给定一个母串和多个查询,每个查询询问两个子串是否可以一一对应。我们可以使用滚动哈希技术来高效地解决这个问题。

方法思路

  • 滚动哈希预处理:我们首先预处理母串的前缀哈希值和底数幂次数组。前缀哈希数组用于快速计算任意子串的哈希值,底数幂次数组用于处理哈希值的模运算。
  • 哈希值计算:对于每个查询,计算两个子串的哈希值。哈希值相同意味着这两个子串是等价的。
  • 冲突处理:为了减少哈希冲突,我们选择了大质数作为模数,并在计算哈希值时进行适当的模运算。
  • 解决代码

    #include 
    #include
    #include
    #include
    using namespace std;#define ll long longconst int N = 2 * 100000 + 10;const int base = 131;const int mod = 19260817;int n, m;string s;ll p[N], h[N];int main() { scanf("%d %d", &n, &m); scanf("%s", s.c_str()); p[0] = 1; for (int i = 1; i <= n; ++i) { p[i] = (p[i-1] * base) % mod; } for (int i = 1; i <= n; ++i) { ll val = (s[i-1] - 'a' + 1); h[i] = (h[i-1] * base + val) % mod; } for (int i = 0; i < m; ++i) { int x, y, len; scanf("%d %d %d", &x, &y, &len); if (x + len - 1 > n || y + len - 1 > n) { printf("NO"); continue; } ll hash_a = (h[x + len - 1] - (h[x - 1] * p[len]) % mod) % mod; if (hash_a < 0) hash_a += mod; ll hash_b = (h[y + len - 1] - (h[y - 1] * p[len]) % mod) % mod; if (hash_b < 0) hash_b += mod; if (hash_a == hash_b) { printf("YES"); } else { printf("NO"); } } return 0;}

    代码解释

  • 预处理:首先读取输入并预处理底数幂次数组p和前缀哈希数组hp数组存储了底数的幂次模运算结果,h数组存储了母串前缀哈希值。
  • 查询处理:对于每个查询,计算两个子串的哈希值。如果两个哈希值相同,则输出"YES",否则输出"NO"。
  • 模运算处理:在计算哈希值时,使用适当的模运算确保结果正确,并处理负数情况。
  • 这种方法的时间复杂度为O(n)预处理和O(m)查询,能够高效处理大规模输入。

    转载地址:http://cjor.baihongyu.com/

    你可能感兴趣的文章
    opencv23-直方图计算
    查看>>
    opencv24-直方图比较
    查看>>
    opencv25-直方图反向投影
    查看>>
    opencv26-模板匹配
    查看>>
    opencv27-轮廓发现
    查看>>
    opencv28-凸包
    查看>>
    opencv29-轮廓周围绘制矩形框和圆形框
    查看>>
    OpenCV3 install tutorial for Mac
    查看>>
    opencv3-Mat对象
    查看>>
    opencv30-图像矩
    查看>>
    opencv32-基于距离变换和分水岭的图像分割
    查看>>
    opencv4-图像操作
    查看>>
    opencv5-图像混合
    查看>>
    opencv6-调整图像亮度和对比度
    查看>>
    opencv9-膨胀和腐蚀
    查看>>
    OpenCV_ cv2.imshow()
    查看>>
    opencv——图像缩放1(resize)
    查看>>
    Opencv——模块介绍
    查看>>
    OpenCV与AI深度学习 | 2024年AI初学者需要掌握的热门技能有哪些?
    查看>>
    OpenCV与AI深度学习 | CIB-SE-YOLOv8: 优化的YOLOv8, 用于施工现场的安全设备实时检测 !
    查看>>