漫画:什么是字符串匹配算法?











































上图中,


?public?static?int?rabinKarp(String?str,?String?pattern){
//主串长度
int?m?=?str.length();
//模式串的长度
int?n?=?pattern.length();
//计算模式串的hash值
int?patternCode?=?hash(pattern);
//计算主串当中第一个和模式串等长的子串hash值
int?strCode?=?hash(str.substring(0,?n));
//用模式串的hash值和主串的局部hash值比较。
//如果匹配,则进行精确比较;如果不匹配,计算主串中相邻子串的hash值。
for?(int?i=0;?i1;?i++)?{
if(strCode?==?patternCode?&&?compareString(i,?str,?pattern)){
return?i;
}
//如果不是最后一轮,更新主串从i到i+n的hash值
if(istrCode?=?nextHash(str,?strCode,?i,?n);
}
}
return?-1;
}
private?static?int?hash(String?str){
int?hashcode?=?0;
//这里采用最简单的hashcode计算方式:
//把a当做1,把b当中2,把c当中3.....然后按位相加
for?(int?i?=?0;?i?hashcode?+=?str.charAt(i)-'a';
}
return?hashcode;
}
private?static?int?nextHash(String?str,?int?hash,?int?index,?int?n){
hash?-=?str.charAt(index)-'a';
hash?+=?str.charAt(index+n)-'a';
return?hash;
}
private?static?boolean?compareString(int?i,?String?str,?String?pattern)?{
String?strSub?=?str.substring(i,?i+pattern.length());
return?strSub.equals(pattern);
}
public?static?void?main(String[]?args)?{
String?str?=?"aacdesadsdfer";
String?pattern?=?"adsd";
System.out.println("第一次出现的位置:"?+?rabinKarp(str,?pattern));
}








关注公众号:拾黑(shiheibook)了解更多
[广告]赞助链接:
四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/
关注网络尖刀微信公众号随时掌握互联网精彩
赞助链接
排名
热点
搜索指数
- 1 习近平听取李家超述职报告 7904331
- 2 明年生娃将实现“不花钱” 7809448
- 3 教育部:普通高中严格控制考试次数 7713237
- 4 回顾山东舰硬核名场面 7619488
- 5 健美冠军王昆去世 曾获职业赛8连冠 7522104
- 6 女教师新婚坠亡一楼业主要求赔偿 7427594
- 7 收入分配制度或迎重大改革 7331550
- 8 小学一二年级不进行纸笔考试 7237139
- 9 福建舰入列后首次通过台湾海峡 7143588
- 10 感染甲流后该如何科学调养 7046559







CSDN
