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











































上图中,


?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 习近平将发表二〇二六年新年贺词 7904141
- 2 2026年国补政策来了 7808738
- 3 东部战区:开火!开火!全部命中! 7712893
- 4 2026年这些民生政策将惠及百姓 7616985
- 5 小学食堂米线过期2.5小时被罚5万 7519709
- 6 解放军喊话驱离台军 原声曝光 7428214
- 7 为博流量直播踩烈士陵墓?绝不姑息 7327605
- 8 每月最高800元!多地发放养老消费券 7238391
- 9 数字人民币升级 1月1日起将计付利息 7141831
- 10 2026年1月1日起 一批新规将施行 7040675








CSDN
