学习笔记:


详细讲解:https://blog.csdn.net/pengwill97/article/details/80879387

字符串hash:

利用unsigned long long的范围自然溢出,相当于自动对2^64−1取模

单Hash公式:

hash[i]=(hash[i−1])∗p+idx(s[i]) % mod

其中p和mod均为质数,且有p<mod,对于此种Hash方法,将p和mod尽量取大即可,这种情况下,冲突的概率是很低的。

双Hash公式:

hash1[i]=(hash1[i−1])∗p+idx(s[i]) % mod1

hash2[i]=(hash2[i−1])∗p+idx(s[i]) % mod2

hash结果为<hash1[n],hash2[n]>,这种Hash很安全。

获取子串的hash公式:

题目地址:http://poj.org/problem?id=3461

题目:


求模式串在文本串中出现的次数

解题思路:


p去13331,预处理出p^n,计算模式串的hash值,计算出文本串的hash数组,匹配模式串的hash值和文本串子串的hash值,统计答案。

时间复杂度:O(len(文本串))

ac代码:


#include<iostream>
#include <cstring>
#include <stdio.h>
using namespace std;
typedef unsigned long long ll;
const int maxn = 1e6+5;
const ll p = 133331;
char s1[maxn], s2[maxn];
ll power[maxn], has[maxn];
void init() //预处理出p^n
{power[0] = 1;for(int i = 1; i < maxn; i++)power[i] = power[i - 1] * p; //unsigned long long 自然溢出
}
int main()
{//freopen("/Users/zhangkanqi/Desktop/11.txt","r",stdin);init();int t;scanf("%d", &t);while(t--){scanf("%s", s1 + 1);scanf("%s", s2 + 1);int len1 = strlen(s1 + 1), len2  = strlen(s2 + 1);has[0] = 0;for(int i = 1; i <= len2; i++)has[i] = has[i - 1] * p + (ll)(s2[i] - 'A' + 1);ll sum = 0, ans = 0;for(int i = 1; i <= len1; i++)sum = sum * p + (ll)(s1[i] - 'A' + 1);for(int i = len1; i <= len2; i++){ll tmp = has[i] - has[i - len1] * power[len1];if(sum == tmp) ans++;}printf("%llu\n", ans);}return 0;
}

【算法笔记+POJ3461】Oulipo(字符串hash模版)相关推荐

  1. 【POJ3461】Oulipo(字符串Hash)

    problem 给定两个字符串s1,s2,求s1在s2中出现了多少次(可重叠). len(s1) < 1e4, len(s2) < 1e6. solution 字符串Hash 介绍: 字符 ...

  2. 【字符串算法1】 再谈字符串Hash(优雅的暴力)

    [字符串算法1] 字符串Hash(优雅的暴力) [字符串算法2]Manacher算法 [字符串算法3]KMP算法 这里将讲述  [字符串算法1] 字符串Hash 老版原文: RK哈希(Rabin_Ka ...

  3. 明翰数据结构与算法笔记V0.8(持续更新)

    文章目录 前言 数据结构 `线性表` `数组` `链表` `栈与队列` [串/字符串] 树 并查集 `二叉树` [二叉排序树/二叉搜索树] `红黑树` 红黑树操作 霍夫曼树 `堆` [大/小]根堆 可 ...

  4. 数据结构与算法笔记(十五)—— 散列(哈希表)

    一.前沿 1.1.直接寻址表 当关键字的全域U比较小时,直接寻址是一种简单而有效的技术.假设某应用要用到一个动态集合,其中每个元素都有一个取自全域U={0,1,-,m-1)的关键字,此处m是一个不很大 ...

  5. 算法笔记(胡凡)学习笔记@Kaysen

    本文旨在记录算法笔记学习过程中的收获和一些知识点,部分易错知识点只针对个人而言,CCF-CSP考试冲鸭!!! Chapter 2 C/C++快速入门(易错知识点) 2.1 基本数据类型 变量定义注意区 ...

  6. 《算法笔记》学习 入门篇

    目录 <算法笔记>学习 3.1 简单模拟 例1:[PAT B1001]害死人不偿命的(3n+1)猜想 例2:[PAT B1032]挖掘机技术哪家强 3.2 查找元素 例:[codeup 1 ...

  7. 算法笔记知识点整理大全

    每次刷题都觉得自己吃了知识点不全,基础不牢固的亏,刷题的时候目标也不明确,于是看完了算法笔记并把知识点归纳了一下,当然直接看书会更加详细,这个归纳只是学习时加深印象以及方便自己之后回顾而已:之后刷题大 ...

  8. 算法笔记CodeUp第一至第六章刷题记录

    文章目录 <算法笔记>2.2小节--C/C++快速入门->顺序结构 1.例题1-1-1 按要求输出信息(1) 2.例题1-1-2 按要求输出信息(2) 3.例题1-2-1 求两个整数 ...

  9. 《算法笔记》——笔记

    算法笔记 胡凡 曾磊 主编 机械工业出版社 文章目录 算法笔记 C/C++快速入门 提醒 memset sscanf与sprintf 引用 浮点数的比较 圆周率 复杂度 黑盒测试 入门篇(1)--入门 ...

  10. 算法笔记(三)特殊数据结构——哈希表、有序表、并查集、KMP、Manacher、单调栈、位图、大数据类题

    layout: post title: 算法笔记(三)特殊数据结构--哈希表.有序表.并查集.KMP.Manacher.单调栈.位图.大数据类题 description: 算法笔记(三)特殊数据结构- ...

最新文章

  1. iframe 自动适应高和宽问题 和 其他Frame操作技巧
  2. Django web框架-----Django连接现有mysql数据库
  3. 旷视科技完成4.6亿美元C轮融资,打破商汤4.1亿美元单轮融资记录
  4. Oracle Execute Plan原理分析与实例分享之一
  5. Docker部署网站之后映射域名
  6. SpringMVC处理自定义异常,通过读取配置文件把错误信息显示在前台页面
  7. 【数据挖掘】数据预处理
  8. MTK PerfService介绍
  9. pandas 设置多重索引_pandas dataframe多重索引常用操作
  10. 对c语言课程的收获,c语言课程设计心得体会精选.doc
  11. java web邮件收发组件
  12. AWS新用户入门学习必备知识
  13. 现代治理12.0:Diligent发出“现代领导力”倡议,帮助组织创建更具多元化和包容性的董事会和领导团队
  14. Python条件语句(if、pass)
  15. 瑞利分布的平方是什么分布
  16. 2020年有寓意的领证日期_2020领证吉日
  17. 宇宙最全面试题目实录(二)
  18. 小红旗图标在excel如何输入_Excel用条件格式给数据插上小红旗
  19. 简单删除隐藏文件夹System Volume Information
  20. Android开发:编程实现界面定时刷新

热门文章

  1. 为什么谈设计总爱提老庄之道
  2. 【狂神说Redis】1NoSQL概述 1-1为什么使用NoSQL
  3. Java基础枚举(enum关键字)
  4. 多维动态数组c语言,C语言多维动态数组的实现
  5. JQuery的父、子、兄弟节点查找,节点的子节点循环
  6. 探讨如何在有着1000万条数据的MS SQL SERVER数据库中实现快速的数据提取和数据分页...
  7. iScroll示例,下拉刷新,上拉刷新
  8. RedHat 7配置KVM和桥接
  9. Java抓取淘宝/天猫商品详情 1
  10. flash 绘图API:绘制秀曲线图形