SYZOJP186 你猜猜是不是DP 二分+hash解法

博客探讨了如何使用二分查找和哈希技巧来解决寻找两个字符串的最长公共连续子串问题。由于DP方法在大数据规模下效率低下,博主提出了一种更高效的方法,通过排序哈希值来检查匹配的子串,并详细解释了算法步骤和复杂度分析。
摘要由CSDN通过智能技术生成

SYZOJP186 你猜猜是不是DP题解

题目传送门
现在给两个仅包含小写字母的字符串a,b ,求a 与b的最长公共连续子串的长度。
对于20%的数据,a,b长度 ∈ [1, 200]
对于50%的数据,a,b长度 ∈ [1, 20000]
对于100%的数据, a,b长度 ∈ [1, 200000]

分析

根据数据规模,DP肯定是要GG的
应该是要用比较神奇的字符串算法,但是本题猪油一组测试数据,经过计算,发现二分答案+hash函数可以通过。

做法

  1. 此题可以二分答案长度len
    1. 计算两个字符串各个起点长度为len的子串hash得两hash数组A,B。并从大到小排序。
    2. 两个指针p,q分别指向A,B数组。从前往后扫描。
      1. 如果p,q所指元素hash相等。
        a. A数组中所有hash值和p所指元素相同的元素构成的集合为AA。
        b. 同理有集合BB。
        c. AA和BB的集合都需要两两检验是否有相同子串。
        d. 有则标记跳出。
        e. 若都无,p,q后移。
      2. 不相等,则hash值大者后移。

复杂度

排序

O(Llog2L) O ( L log 2 L )

总的期望
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值