BF算法(buter force)
原理:分为主串和模串,在主串m中匹配模串n,所以主串有从0,1,2,3….到m-n个m-n+1个子字符串
时间复杂度:理论上是O(m*n),m是主串长度,n是子串长度。但是因为匹配到模串第一个不符合的就会返回进行下一次匹配所以实际效果会好不上。加上比较简单、易于排错所以一般工业会采用这种方法
代码示例:
1 | public class BruteForce { |
RK算法-RobinKrap
BF算法的优化,由于BF算法需要一个个比较子串,复杂度是O(m*n),所以KR对BF算法做了优化,预先将所有的子串的hash值计算出来然后吧子串的位置记录下来,计算模串的hash,然后在hash中查找,这样复杂度就是计算模串的O(n)+hash获取的O(1)。
代码
1 | public class RobinKrap { |