BF算法简介
BF算法是Brute Force算法的简称(如果你发挥你得想象 你也可以称之为Boy Friend算法),BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字符;若不相等,则比较S的第二个字符和T的第一个字符,依次比较下去,直到得出最后的匹配结果。正是因为这种蛮干的比较,也被称为蛮干算法
BF算法代码实现方式1
#pragma mark - 暴力的BF算法
#pragma mark -
/**
传入一个主串和字串 匹配是否能匹配成功
@param source 主串
@param target 字串
@return 成功返回主串中开始索引 失败返回-1
*/
- (int)bruteForce1WithSource:(NSString *)source target:(NSString *)target {
//主串遍历
for (int i = 0; i < source.length; i++) {
//目标字符串遍历
for (int j = 0; j < target.length; j++) {
//关键在于这句 从主串中取值 当i确定时 需要加上j来往后挪动位置 不相等就直接break
if ([source characterAtIndex:i + j] != [target characterAtIndex:j]) {
break;
}
//当索引到了字符串最后一个字符时就证明匹配成功
if (j == target.length -1) {
return i;
}
}
}
return -1;
}
BF算法代码实现方式2
一般来说我们都用这种方式来实现,因为上面这种有些人可能不是很能接受
/**
暴力匹配字符解法2
@param source 原字符串
@param target 匹配字符串
@return 成功返回索引 失败返回-1
*/
- (int)bruteForce2WithSource:(NSString *)source target:(NSString *)target {
//主串索引
int i = 0;
//字串索引
int j = 0;
while (i < source.length && j < target.length) {
//依次来一个一个对比
if ([source characterAtIndex:i] == [target characterAtIndex:j]) {
i++;
j++;
}else {//索引回溯 i的索引变化为下一个也就是 (i- j +1)而j = 0从头开始
i = i - j + 1;
j = 0;
}
}
//到这一步 判断如果j == 字符串长度证明匹配成功
if (j == target.length ) {
return i - j;
}
return -1;
}
BF存在的问题和下篇预告
很明显我们可以看到BF算法是存在很大缺陷的,因为有些情况我们根本不需要从头来开始去匹配 例如:

很明显我们下一次匹配的位置应该是下图这样:

而不是从B开始 ,大牛们是无法忍受“暴力破解”这种低效的手段的,于是就有三个大牛一起研究出了我下篇文章要讲的KMP算法,so,下篇文章见。
网友评论