【Java】BF算法(串模式匹配算法)

news/2024/7/7 19:00:34

☀️ 什么是BF算法

BF算法,即暴力算法,是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个与模式串T的第一个字符串进行匹配,若相等,则继续比较S的第二个字符和T的第二个字符;若不相等,则比较S的第二个字符和T的第一个字符,依次比较下去,直到得出最后的匹配结果,BF算法是一种蛮力算法

❄️题目:

给出字符串str作为主串,然后给出子串sub,查找子串是否在主串中出现,若出现返回主串中的第一个匹配的下标,否则返回-1。

⛄️图解演示:

假设:
主串:a b a b c a b c d a b c d e
子串:a b c d
给定i,j 记录字符串下标
在这里插入图片描述

🌏算法思想:

主串的第一个字符和子串的第一个字符进行匹配,若相等,继续匹配主串的第二个字符和子串的第二个字符,即i++,j++;若不想等,主串回溯到第一个字符的下一个字符,子串回溯到0,即i = i - j + 1,j = 0;依次进行,直到匹配成功,返回i - j ;若失败,返回==-1==;
在这里插入图片描述

🌼算法代码:

public class BF {
    public static int bF(String str,String sub) {
        if(str==null || sub == null) {
            return -1;
        }
        int lenStr = str.length();
        int lenSub = sub.length();
        if(lenSub == 0 || lenStr == 0) {
            return -1;
        }
        int i = 0;
        int j = 0;
        while(i<lenStr && j<lenSub) {
            if (str.charAt(i) == sub.charAt(j)){
                i++;
                j++;
            }
            else{
                i = i-j+1;
                j = 0;
            }
        }
        if(j>=lenSub){
            return i-j;
        }
        else{
            return -1;
        }
    }

    public static void main(String[] args) {
        System.out.println(bF("ababcabcdabcde","abcd"));
        System.out.println(bF("ababcabcdabcde","abcdf"));
        System.out.println(bF("ababcabcdabcde","abcde"));
    }
}

运行结果

5
-1
9


http://lihuaxi.xjx100.cn/news/1451666.html

相关文章

[机器学习]特征工程:特征降维

特征降维 1、简介 特征降维是指通过减少特征空间中的维度&#xff0c;将高维数据映射到一个低维子空间的过程。 在机器学习和数据分析中&#xff0c;特征降维可以帮助减少数据的复杂性、降低计算成本、提高模型性能和可解释性&#xff0c;以及解决维度灾难等问题。特征降维通…

tsconfig.json和jsconfig.json配置

{// 编译选项"compilerOptions": {// 生成代码的语言版本&#xff1a;将我们写的 TS 代码编译成哪个版本的 JS 代码// 命令行&#xff1a; tsc --target es5 11-测试TS配置文件.ts"target": "es5",// 指定要包含在编译中的 library"lib&quo…

【0216】【0215】stats collector(统计信息收集器)资源初始化之获取IPV4套接字地址信息(2)

相关阅读: 【0215】stats collector(统计信息收集器)工作原理之资源初始化(1) 1. 如何获取ipv4套接字地址信息 在【0215】stats collector(统计信息收集器)工作原理之资源初始化(1)一文的2.1.3节中讲解了stats collector进程会创建UDP,与其他进程进行通信,从而实现…

WMS:SurfaceView绘制显示

WMS:SurfaceView绘制显示 1、SurfaceView控件使用1.1 Choreographer接受VSync信号1.2 自定义SurfaceView1.3 结果 2、SurfaceView获取画布并显示2.1 SurfaceHolder.lockCanvas()2.2 SurfaceHolder.unlockCanvasAndPost(Canvas canvas) 1、SurfaceView控件使用 1.1 Choreograph…

ASCII编码转换详解

ASCII ((American Standard Code for Information Interchange) 美国信息交换标准代码&#xff09;是基于拉丁字母的一套电脑编码系统&#xff0c;主要用于显示现代英语和其他西欧语言。它是最通用的信息交换标准&#xff0c;并等同于国际标准ISO/IEC 646。ASCII第一次以规范标…

LeetCode150道面试经典题-- 环形链表(简单)

1.题目 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置&…

《算法竞赛·快冲300题》每日一题:“围墙”

《算法竞赛快冲300题》将于2024年出版&#xff0c;是《算法竞赛》的辅助练习册。 所有题目放在自建的OJ New Online Judge。 用C/C、Java、Python三种语言给出代码&#xff0c;以中低档题为主&#xff0c;适合入门、进阶。 文章目录 题目描述题解C代码Java代码Python代码 “ 围…

nginx创建和监听套接字分析

https://cloud.tencent.com/developer/article/1859856 简介 nginx作为一个web服务器&#xff0c;肯定是有listen套接字对外提供服务的&#xff0c;listen套接字是用于接收HTTP请求。 nginx监听套接字的创建是根据配置文件的内容来创建的&#xff0c;在nginx.conf文件中有…