栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

力扣28题记录C语言rk算法(滚动hash)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

力扣28题记录C语言rk算法(滚动hash)

记录的都是做题时的解法这是力扣题,实现strStr(),有很多方法,C语言自带的strstr()函数,BF(暴力匹配),KMP,RK,来记录下RK 。

// rk
#include
#include
int rk(char *s, char *pa){
	unsigned long skey = 0, pakey = 0, base = 1;  
	int slen = strlen(s);
	int palen = strlen(pa);
	for(int i = 0; i < palen; i++){    //计算初始的hash值
		pakey = pakey * 26 + pa[i] - 'a';
		skey = skey * 26 + s[i] - 'a';
		base *= 26;   //base 就是记录模式串第一个字符的次数 比如 ‘cba’ base = pow(26,2)
	}
	int left = 0, right = palen - 1;
	while(right < slen){  // 从第一个依次匹配
		if(skey == pakey){
			return left;
		}
		++right; 
		skey =  skey * 26 - (s[left] - 'a') * base + s[right] - 'a';
		++left;
	}
	return -1;
} 
int main()
{
	char s[]="fhiuwehuewhdhuiqwgdyugqwudguqdfuwqudyguyqwgduq";
	char pa[]="wehuewh";
	printf("%dn",rk(s,pa));
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/691914.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号