RK算法是基于hash的,如果两个字符串hash后的值不相同,则它们肯定不相同;如果它们hash后的值相同,它们不一定相同。
缺点:RK成也hash,败也hash。每一次hash冲突都要遍历一次字符串,当冲突很多很多的时候,RK算法就会退化成BF算法(BF算法就是对字符串逐一比较,每次匹配不成功就重新开始下一次匹配)。
import java.util.Scanner;
//字符串匹配,主串str,样式串sam_str,返回sam_str在str第一次出现的位置,否则返回-1
public class Main {
public static int pipei(String str,String sam_str) throws Exception{
if (str.trim().isEmpty() || sam_str.trim().isEmpty()){
new Exception("主串或样式串为空");
}
int n = str.length();//主串长度