public class test10 {
public static void main(String[] args) {
String s="abcdabcd"; //源串
String p="bcd"; //目标串
match(p,s);
}
static void match(String p,String s){
long hash_p=hashVal(p); //计算目标串的hash值
int len=p.length(); //目标串的长度
for (int i = 0; i+len <=s.length(); i++) { //遍历原串,若 i+len==s.length() 说明匹配到最后了
if (hash_p==hashVal(s.substring(i,i+len))) //从位置i进行匹配p, 若 (i,i+len)的hash值等于目标串 hash_p,则表示匹配成功
System.out.println("索引 "+i+" 处匹配成功");
}
}
final static long seed=31; //定义一个种子
static long hashVal(String s){ //计算字符串的hash值
long h=0; //初始化为0
for (int i = 0; i < s.length(); i++) {
h=h*seed+s.charAt(i);
}
return h%Long.MAX_VALUE; //取余,防止数据范围过大遭成溢出
}
}
利用hash值进行字符串匹配
最新推荐文章于 2022-10-26 11:15:50 发布