package demo2;
public class P81 {
public static void main(String[] args) {
String s="abcbbcabc";
String p="bc";
long[] sHash=hashValue(s,p.length());
long[] pHash=hashValue(p,p.length());
hashMatch(sHash,pHash[0]);
}
static long[] hashValue(String str, int pLen) {
int seed=7;
long[] res=new long[str.length()-pLen+1];
int i=0;
long hash=0;
for(;i<pLen;i++) {
hash=hash*seed+str.charAt(i);
}
res[0]=hash;
for(i=pLen;i<str.length();i++) {
char oldChar=str.charAt(i-pLen);
hash= hash*seed+str.charAt(i) - oldChar*(long)Math.pow(seed, pLen);
res[i-pLen+1]=hash;
}
return res;
}
static void hashMatch(long[] sHash, long pValue) {
for(int i=0;i<sHash.length;i++) {
if(pValue==sHash[i])
System.out.println("match at : "+i);
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?