841. 字符串哈希
哈希 字符串
2023-09-27 14:27:32 时间
Powered by:NEFU AB-IN
文章目录
841. 字符串哈希
-
题意
给定一个长度为 n 的字符串,再给定 m 个询问,每个询问包含四个整数 l1,r1,l2,r2,请你判断 [l1,r1] 和 [l2,r2] 这两个区间所包含的字符串子串是否完全相同。
字符串中只包含大小写英文字母和数字。 -
思路
字符串哈希板子题
注意的点:
- P为经验值,可以取131,也可以取13331
- 对 2 64 2^{64} 264进行取模
- 别忘了对 p [ 0 ] p[0] p[0]进行赋值为1,因为 p 0 = 1 p^0 = 1 p0=1
s = " " + s
,字符串的第0位空出来- 区间和公式的理解: ABCDE 与 ABC 的前三个字符值是一样,只差两位,乘上 P 2 P^2 P2, 把 ABC 变为 ABC00,再用 ABCDE - ABC00 得到 DE 的哈希值。
-
代码
''' Author: NEFU AB-IN Date: 2022-02-12 16:07:23 FilePath: \ACM\Acwing\841.py LastEditTime: 2022-02-12 16:12:41 ''' N = int(1e5 + 100) P, MOD = 131, 1 << 64 h = [0] * N p = [0] * N p[0] = 1 #初始化 def get(l, r): return (h[r] - h[l - 1] * p[r - l + 1]) % MOD if __name__ == "__main__": n, m = map(int, input().split()) s = input() s = " " + s #空一位 for i in range(1, n + 1): p[i] = p[i - 1] * P % MOD h[i] = (h[i - 1] * P + ord(s[i])) % MOD for i in range(m): l1, r1, l2, r2 = map(int, input().split()) if get(l1, r1) == get(l2, r2): print("Yes") else: print("No")
相关文章
- 实操案例:字符串哈希表操作
- Redis数据结构之字符串、哈希结构常用命令
- poj 1840 哈希
- LeetCode_哈希表_排序_中等_451.根据字符出现频率排序
- 使用nginx哈希表
- UVA-257 哈希算法
- Git 内部原理之 Git 对象哈希
- 哈希表系列② -- 两个数组的交集
- 【Redis】Redis 哈希 Hash 键值对集合操作 ( 哈希 Hash 键值对集合简介 | 查询操作 | 增加操作 | 修改操作 )
- 长春理工大学第十四届程序设计竞赛D Capture The Flag——哈希&&打表
- P3370 【模板】字符串哈希
- redis cluster(集群)模式-基于docker 哈希槽分区
- Delphi 中的哈希表(二)—— TStringHash
- 一致性哈希算法原理
- C# 统计文章中字符的种类和个数 哈希表和字典的使用