【题目描述】
给出两个字符串s1,s2((只有大写字母),求s1在s2中出现多少次。

例如:s1=“ABA”,s2=“ABAABA”,答案为2。

【输入】
输入T组数据,每组数据输出结果。

【输出】
如题述。

【输入样例】
3
BAPC
BAPC
AZA
AZAAZAAZA
VEEDI
AVERDXIVYERDLAN
【输出样例】
1
3
0
【提示】
1≤s1的长度 ≤10^4​​ ,1≤s2的长度 ≤10^6​ 。

分析

  1. 此题是判断一个字符串有多个个子串与给定字符串相等,如果直接两层for会超时,所以可以采用字符串哈希,可参考:字符串哈希;
  2. s1的字符串哈希值存在h1,s2的字符串哈希值存在h2,然后遍历s2,从i开始到i + s1.size() - 2(s1.size-1个字符)这一段子串的哈希值,判断和s1是否相等;
  3. 多组测试数据,记得memset数组
#include<bits/stdc++.h>using namespace std;typedef unsigned long long ull;
const int N = 1e6 + 10;
ull h1[N];//存字符串s1前k个字母的哈希值
ull h2[N];//存字符串s2前k个字母的哈希值
ull p[N];// p[k]存储 P^k mod 2^64
int t, P = 131;
string s1, s2;//计算子串 s2[l ~ r] 的哈希值
ull get(int l, int r) {return h2[r] - h2[l - 1] * p[r - l + 1];
}int main() {cin.tie(0);cin >> t;while (t--) {cin >> s1 >> s2;s1 = " " + s1;s2 = " " + s2;p[0] = 1;//求s1的哈希for (int i = 1; i < s1.size(); ++i) {h1[i] = h1[i - 1] * P + s1[i];}//求s2的哈希for (int i = 1; i < s2.size(); ++i) {h2[i] = h2[i - 1] * P + s2[i];p[i] = p[i - 1] * P;}int cnt = 0;for (int i = 1; i < s2.size(); ++i) {//s1的有效长度为s1.size()-1if (get(i, i + s1.size() - 2) == h1[s1.size() - 1])cnt++;}cout << cnt << endl;//不能忘了初始化memset(h2, 0, sizeof h2);memset(h1, 0, sizeof h1);memset(p, 0, sizeof p);}
}

1455:【例题1】Oulipo——字符串哈希相关推荐

  1. Oulipo[字符串哈希]

    题目 The French author Georges Perec (1936–1982) once wrote a book, La disparition, without the letter ...

  2. Hash(哈希(字符串哈希))模板和做题总结(详细易懂)

    文章目录 目录 文章目录 前言: 一 Hash表 1 Hash函数的构造 2 拉链法处理hash冲突模板 3 开放寻址法处理hash冲突 4(例题).雪花雪花 二   字符串Hash O(n)+O(m ...

  3. 字符串哈希算法简单入门学习

    字符串哈希算法 字符串哈希,最著名的就是BKDRHash,也就是将字符串变成数值,并且最后变成的数值是一个P进制的数(一班取131或者13331),一般来说P最好为素数.然后我们之所以需要前缀和,是因 ...

  4. ELFhash - 优秀的字符串哈希算法

    原 ELFhash - 优秀的字符串哈希算法 分类:算法杂论算法精讲数据结构 (1424)  (2) 1.字符串哈希: 我们先从字符串哈希说起 在很多的情况下,我们有可能会获得大量的字符串,每个字符串 ...

  5. 【CodeForces】961 F. k-substrings 字符串哈希+二分

    [题目]F. k-substrings [题意]给定长度为n的串S,对于S的每个k-子串$s_ks_{k+1}...s_{n-k+1},k\in[1,\left \lceil \frac{n}{2} ...

  6. 138. 兔子与兔子【字符串哈希】

    很基础的字符串哈希 #include<bits/stdc++.h> using namespace std; typedef unsigned long long int ull; con ...

  7. Singing Superstar 字符串哈希-map操作

    题意 : 给一长度 < 1e5 的字符串s,q < 1e5次询问,每次问一个长 < 30 的串 t 在s中出现的次数,且t不可重叠. 例 : "abababa"中 ...

  8. 中石油训练赛 - DNA(字符串哈希)

    题目链接:点击查看 题目大意:给出一串只由A,C,G,T组成的字符串,再给出一个数字k,问每个长度为k的连续子串,出现的次数最多是多少次 题目分析:O(n)哈希一下,O(n)更新一下用无序map维护的 ...

  9. HDU - 3613 Best Reward(字符串哈希)

    题目链接:点击查看 题目大意:给出一个字符串,每个字母都有一个贡献值,现在要将这个字符串拆成两个子串,如果子串是回文串的话,贡献就是其中每个字母的贡献和,现在问贡献最大为多少 题目分析:很简单的一道回 ...

最新文章

  1. 【Qt】通过QtCreator源码学习Qt(八):插件生命周期及对应状态(代码走读)
  2. 你见过最差的算法工程师都有哪些表现?
  3. PL/SQL -- 动态SQL
  4. 告诉你你也学不会!中台灵感 SuperCell 的管理之道!
  5. linux输入文件后怎么保存不了怎么办,关于linux:输入数据后为什么不能保存VI文件?...
  6. 卷积神经网络原理及实现
  7. 作业调度算法--高响应比优先 操作系统_处理器管理_编程题
  8. .NET各版本一览表
  9. c#操作excel后关闭excel.exe的方法
  10. GitHub Copilot 现已登陆 Visual Studio!
  11. 云控参数下发android,Oldboot鬼影又现,另一例山寨手机中运用云端远控技术的木马...
  12. word2007文档无法编辑怎么办
  13. .vimrc示例文件
  14. 交换机短路_交换机日常怎么运行维护?一文告诉你
  15. 基于PyTorch+YOLOv4的口罩佩戴检测,附数据集
  16. shell脚本--部署应用到tomcat并启动tomcat
  17. 快手磁力金牛和小店通的区别
  18. bde oracle 商友的流程_怎么用BDE连接Oracle?(100分)
  19. 云主机创建网络失败:Unable to create the network. No tenant network is available for allocation.
  20. Either类java_怎样利用Either和Option进行函数式错误处理的示例

热门文章

  1. 宏碁Acer K50-20-55Z3拆机 +取下主板CMOS电池放电重新进入BIOS成功
  2. 2015070306 - EffactiveJava笔记 - 第55条 谨慎地进行优化(2)
  3. 我的Photoshop大师之路(五)
  4. git fork的使用
  5. 360竞价推广如何获得优质的关键词?
  6. 广和通FM650 5G模块连接Ubuntu不显示USB串口问题解决
  7. init_modue和finit_module
  8. tools1.0.1
  9. chap mysql借点_mysql必知必会-读书笔记(chap4-8)
  10. .gitlab-ci.yml 使用 artifacts  报错, runner 是本地虚拟机