基础班 strStr算法实现

这篇博客介绍了Rabin Karp字符串搜索算法,通过使用Hash function和字符转换成整数的方法提高效率。算法主要步骤包括计算目标字符串的Hash值,遍历源字符串并计算子字符串的Hash值,对比并验证是否相同。文中强调了处理Hash值取模和避免负数的问题,以及算法的时间复杂度为O(N+M)。
摘要由CSDN通过智能技术生成

把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
	public int strStr2(String source,String target){
   
		if(source==null
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值