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

题解:AcWing 841 字符串哈希

【题目来源】

AcWing:841. 字符串哈希 - AcWing题库

【题目描述】

给定一个长度为n的字符串,再给定m个询问,每个询问包含四个整数 11,r1,12,r2,请你判断[11,r1]和[12,r2]这两个区间所包含的字符串子串是否完全相同。

字符串中只包含大小写英文字母和数字。+

【输入】

第一行包含整数n和m,表示字符串长度和询问次数。

第二行包含一个长度为n的字符串,字符串中只包含大小写英文字母和数字。

接下来m行,每行包含四个整数11,r1,12,r2,表示一次询问所涉及的两个区间。

注意,字符串的位置从1开始编号。

【输出】

对于每个询问输出一个结果,如果两个字符串子串完全相同则输出 Yes,否则输出No。每个结果占一行。

【输入样例】

8 3
aabbaabb
1 3 5 7
1 3 6 8
1 2 1 2

【输出样例】

Yes
No
Yes

【解题思路】

image

【算法标签】

《AcWing 841 字符串哈希》 #字符串哈希# #哈希#

【代码详解】

#include <bits/stdc++.h>
using namespace std;typedef unsigned long long ULL;  // 使用无符号长整型,自然溢出相当于取模2^64
const int N = 100010;            // 字符串最大长度
const int P = 131;               // 进制基数,经验值,131或13331int n, m;        // n: 字符串长度, m: 查询次数
char str[N];     // 存储字符串,下标从1开始
ULL h[N];        // 前缀哈希数组,h[i]表示前i个字符的哈希值
ULL p[N];        // 幂数组,p[i] = P^i// 获取子串str[l..r]的哈希值
ULL get(int l, int r)
{// 计算哈希值公式:h[l..r] = h[r] - h[l-1] * p[r-l+1]return h[r] - h[l - 1] * p[r - l + 1];
}int main()
{// 输入字符串长度、查询次数和字符串// str+1表示从str[1]开始存储,使下标从1开始scanf("%d%d%s", &n, &m, str + 1);// 初始化幂数组p[0] = 1;  // P^0 = 1for (int i = 1; i <= n; i++){// 计算P的i次幂p[i] = p[i - 1] * P;// 计算前i个字符的哈希值// 递推公式:h[i] = h[i-1] * P + str[i]h[i] = h[i - 1] * P + str[i];}// 处理每次查询while (m--){int l1, r1, l2, r2;  // 两个子串的起始和结束位置scanf("%d%d%d%d", &l1, &r1, &l2, &r2);// 比较两个子串的哈希值if (get(l1, r1) == get(l2, r2)){puts("Yes");  // 哈希值相同,子串相同}else{puts("No");   // 哈希值不同,子串不同}}return 0;
}

【运行结果】

8 3
aabbaabb
1 3 5 7 
Yes
1 3 6 8
No
1 2 1 2
Yes
http://www.jsqmd.com/news/399303/

相关文章:

  • 题解:AcWing 839 模拟堆
  • 题解:AcWing 838 堆排序
  • 题解:AcWing 840 模拟散列表
  • 神来之笔!提示工程架构师的Agentic AI可视化分析创新之举
  • 探索Gemini在AI原生应用中的无限可能
  • 硕士研究生毕业要求的两个工作量是什么意思?
  • 《AI应用架构师剖析:AI发展进程中社会责任的关系密码》
  • Windows 的 cmd 里如何定义 alias?
  • 题解:AcWing 837 连通块中点的数量
  • 题解:AcWing 836 合并集合
  • 题解:AcWing 240 食物链
  • 2026 深度解析:ChatGPT Plus 国内充值与代充避坑指南(技术原理与实操全纪录)
  • 2026 技术指南:攻克 ChatGPT Plus 国内订阅难题(含代充、虚拟卡、支付风控深度解析)
  • 【UI自动化测试】2_PO模式 _单元测试框架(重点)
  • 多源异构大数据融合挖掘技术
  • 模型蒸馏在AI原生应用中的5大核心优势解析
  • 【UI自动化测试】1_PO模式 _面向过程编码
  • 开发日志4
  • 讲讲积分墙广告、精品页面、canvas 的 SEO 密码
  • Copilot进阶教程:在AI原生应用中实现智能开发工作流
  • 题解:AcWing 835 Trie字符串统计
  • 冥想第一千七百九十九天(1799)
  • 临沂有实力的橡胶木板材公司哪家好 - 品牌推荐(官方)
  • 冥想第一千八百天(1800)
  • 聊聊 Comsol 中的拓扑优化那些事儿
  • 2036年,AGI会如约而至吗?深度剖析通用人工智能的十年之约与未来图景
  • 题解:AcWing 143 最大异或对
  • 题解:AcWing 829 模拟队列
  • Seedance 深度解析:字节跳动 AI 视频生成模型从 1.0 到 2.0 的全面进化
  • 题解:AcWing 831 KMP字符串