字符串Hash的一个板子题的思考

今天学到了字符串Hash,我觉得相对于kmp算法来说,字符串hash通过子串的hash值之间进行比较,字符串哈希适用于频繁比较和查找字符串的场景,例如判定两个字符串是否相等、判断字符串是否存在等。KMP算法适用于需要在一个字符串中寻找另一个字符串的出现位置的场景,例如查找关键字、实现字符串匹配等,对于复杂度来说,字符串hash的字符串比较通常在于O(1),但是有hash冲突,所以并不稳定,kmp算法虽然有O(n + m)(ps:n,m分别为源,模式字符串的长度),但是较为稳定。

字符串hash的整体框架

typedef unsigned long long ull;
const int base =131 //base一般为一个质数
 ull h[N];//h[i]表示s[1-i]的Hash(类似前缀和)
char s[N];
for(int i=1;i<=n;++i)h[i]=h[i-1]*base + s[i] - 'a'+1;
//获取子串s[l] - s[r]的Hash
ull getHash(ull h[],int l,int r)
{
    return h[r] -  h[l-1] * b[r-l + 1];b[i]表示base的i次方(预处理)
}

本题是一个计算源字符串通过每一位转换为自己的对立大小写(不知道咋说,a变为A,B变为b),再通过字符串hash计算目标字符串的hash值,再通过二分的操作计算源字符串子串的hash值与目标的进行匹配,更新匹配的长度,看是否符合题目要求即可输出,具体题目链接如下:

https://www.lanqiao.cn/problems/5132/learning/?page=1&first_category_id=1&name=%E5%A5%91%E5%90%88%E5%8C%B9%E9%85%8D

相关推荐

  1. 字符串Hash一个板子思考

    2024-02-09 22:26:01       29 阅读
  2. Vue2面试:说一下路由模式hash和history区别?

    2024-02-09 22:26:01       32 阅读
  3. day6 力扣公共前缀--go实现---对字符串一些思考

    2024-02-09 22:26:01       42 阅读
  4. [高考] 数学一般解题思路

    2024-02-09 22:26:01       18 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-09 22:26:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-09 22:26:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-09 22:26:01       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-09 22:26:01       20 阅读

热门阅读

  1. 贪心+堆维护,LCP 30. 魔塔游戏

    2024-02-09 22:26:01       33 阅读
  2. 人工智能深度学习如何入门?

    2024-02-09 22:26:01       26 阅读
  3. QT时间日期与定时器

    2024-02-09 22:26:01       30 阅读
  4. 第三百一十二回

    2024-02-09 22:26:01       32 阅读
  5. MongoDB聚合: $sortByCount

    2024-02-09 22:26:01       28 阅读
  6. C#系列-数据结构+递归算法+排序算法(3)

    2024-02-09 22:26:01       27 阅读
  7. VUE2和VUE3区别对比一览

    2024-02-09 22:26:01       25 阅读
  8. XGB-5: DART Booster

    2024-02-09 22:26:01       29 阅读
  9. C语言常见面试题:C语言有哪些数据类型?

    2024-02-09 22:26:01       21 阅读