1. BF算法简介:
BF(Brute Force)算法是普通的模式匹配算法,又称为朴素匹配算法或蛮力算法,该算法最大缺点就是字符匹配失败指针就要回溯,所以性能很低。
2. BF算法思想:
BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字符;若不相等,则比较S的第二个字符和P的第一个字符,依次比较下去,直到得出最后的匹配结果。
3. Java实现:
// 朴素匹配算法
public class BruteForce {
/**
* @param mainStr 主串
* @param subStr 子串
* @return 字符串匹配成功起始位置
*/
public static int getMatchIndex(String mainStr, String subStr) {
int i = 0, j = 0;
while (i < mainStr.length()) {
if (mainStr.charAt(i) == subStr.charAt(j)) { // 两字母相等则继续
i++;
j++;
} else { // 两字母不等则角标后退重新开始匹配
i = i - j + 1; // i 回退到上次匹配首位的下一位
j = 0; // j 回退到子串的首位
}
if (j == subStr.length())
return i - j;
}
return -1;
}
public static void main(String[] args) {
System.out.println("匹配成功的位置为: " + getMatchIndex("god is a girl", "girl"));
}
}
注: 其实Java API中已经实现了字符串匹配这一算法,如: "abc".indexOf("bc") 将会返回1。这里仅仅是模拟该算法,仅供参考。
4. BF算法时间复杂度:
该算法最坏情况下要进行 M * ( N - M + 1) 次比较,时间复杂度为
O ( M * N )。
分享到:
相关推荐
《大话数据结构》———C语言简单实现KMP模式匹配算法
Android之大话设计模式——:抽象工厂模式借鉴.pdf
大话数据结构 .pptx
Android之大话设计模式——:抽象工厂模式参考.pdf
在计算机科学领域,字符串匹配是查找一个字符串(称为模式)在另一个大字符串(称为文本)中出现的位置的经典问题。KMP(Knuth-Morris-Pratt)算法是一种高效的字符串匹配算法,它避免了不必要的字符比较,提高了...
《大话数据分析:Tableau数据可视化实战》的数据集是一份重要的资源,对于想要学习和提升Tableau数据可视化技能的人来说极具价值。Tableau是一款强大的商业智能工具,它允许用户通过直观的拖放界面来探索和可视化...
《算法与数据结构C与C++描述》是针对计算机科学中的核心概念——算法和数据结构进行深入探讨的教材。在编程领域,理解并熟练运用这些概念对于提升代码效率和优化程序设计至关重要。本文将详细阐述其中的关键知识点。...
大话数据结构
大数据也可以定义为来自各种来源的大量非结构化或结构化数据。从学术角度而言,大数据的出现促成广泛主题的新颖研究。这也导致各种大数据统计方法的发展。大数据并没有统计学的抽样方法;它只是观察和追踪发生的事情...
Java代码积累:并发 设计模式 数据结构 使用容器 实用 类 基础知识 并发性 演示线程的生命周期 生产者-消费者 设计模式参考《大话设计模式》 工厂简单模式 创造型模式 工厂方法模式 抽象工厂模式 原型模式 建造者...
读书笔记:大话设计模式C++
读书笔记大化设计模式、大话数据结构
本课件涵盖了数据结构的多个重要主题,包括线性表、栈和队列、串、数和二叉树、图、查找以及内部排序。 线性表是最基本的数据结构之一,它是一组按顺序排列的元素集合。每个元素都有一个唯一的索引,可以实现快速...
数据结构与算法(大话设计模式)自己做的笔记
个人自用
基于《大话数据结构》进行数据结构的学习
读书笔记:大话设计模式
**抽象工厂模式**是软件设计模式中的一种创建型模式,主要用在需要创建一系列相关或相互依赖的对象,而无需指定它们具体的类时。这个模式的关键在于提供了一个接口,允许客户端在不关心产品具体实现的情况下创建多个...
8. 模板方法模式:定义一个操作中的算法骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 9. 组合模式:允许你将对象组合成树形结构来表现“部分-整体”的层次...
大话设计模式总结.pdf大话设计模式总结.pdf大话设计模式总结.pdf大话设计模式总结.pdf大话设计模式总结.pdf