基础班 strStr算法实现

把abc变成bcd
在这里插入图片描述
hash function 把一个string对应到某一个位置 ,然后下次他来的时候还是这个位置,可以检查看是否存在于整个数组当中

字符转换成整数 0-255 一个字节 可以直接乘 出来就是整数 语言会自动转换 乘以任何数字都可以 这里31是常用的,基数num
效率最高,效果最好

在这里插入图片描述
这个结果可能很大 超出证书的范围 取模
在这里插入图片描述
模2出来一半是0一半是1 不够比较 除以一个比较大的数
在这里插入图片描述
整个时间复杂度O(N+M) 所以一样的很少

Rabin Karp Algorithm。用Hash方程的思想做。自己实现Hash function。
1.提前算好target的code。
2.开始读入source的每个字符,在for循环里计算所有长度为target.length()的子字符串的hashcode。
3.对比,如果code一样,要进一步对比是否substring的确一样以排除false positive.

细节:
1.第二步内比如从abc -> bcd,for循环每次都加了新的字符,d已经被加上去了,你只要轻松地排除窗口刚滑走的a幂次即可。因为幂次固定是31target.length(),可以提早把幂次算好。
2.对%BASE这个操作每次计算别忘了。
3.对两个各自对BASE取余过的数做减法后,可能会出来负数,这时候不好

public class Solution{
   
	public int BASE=1000000
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值