哈希(BKDR_hash)+马拉车

1. 洛谷P3370:字符串哈希模板
2. POJ3974/洛谷P3805:哈希+二分->[O(nlogn)](见POJ)、马拉车算法模板->[O(n)](见洛谷):就是针对你这种最长回文子串
3. 洛谷P4503 [CTSC2014]:字符串的哈希预处理枚举 --(顺便记下penguin: 企鹅) QQ: ???

于哈希的seed:131,13331等
关于哈希的MOD:19801217,19750817等

Some blogs: https://www.cnblogs.com/Slager-Z/p/7807011.html
?
hash好像可以暴力水过很多字符串算法。。
1、kmp
问题:给两个字符串S1,S2,求S2是否是S1的子串,并求S2在S1中出现的次数
把S2 Hash出来,在S1里找所有长度为|S2|

2、AC自动机
问题:给N个单词串,和一个文章串,求每个单词串是否是文章串的子串,并求每个单词在文章中出现的次数。
把每一个单词hash成整数,再把文章的每一个子串hash成整数,接下来只需要进行整数上的查找即可。
复杂度:O(|A|2+|S|)
用AC自动机可以做到O(|A|+|S|)

3、后缀数组
问题:给两个字符串S1,S2,求它们的最长公共子串的长度。
将S1的每一个子串都hash成一个整数,将S2的每一个子串都hash成一个整数
两堆整数,相同的配对,并且找到所表示的字符串长度最大的即可。
复杂度:O(|S1|2+|S2|2)
用后缀数组可以优化到O(|S|log|S|)

4、马拉车

问题:给一个字符串S,求S的最长回文子串。
先求子串长度位奇数的,再求偶数的。枚举回文子串的中心位置,然后二分子串的长度,直到找到一个该位置的最长回文子串,不断维护长度最大值即可。
复杂度:O(|S|log|S|)
用manacher可以做到O(|S|)

5、扩展kmp
问题:给一个字符串S,求S的每个后缀与S的最长公共前缀
枚举每一个后缀的起始位置,二分长度,求出每个后缀与S的最长公共前缀。
复杂度:O(|S|log|S|)
用extend-kmp可以做到O(|S|)

hash是一种优雅的暴力。因为字符串特殊的性质,我们可以二分地处理它,一般都有单调性。

 

转载于:https://www.cnblogs.com/xzmxiao/p/hash.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值