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

?? 什么是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://www.pswp.cn/news/39117.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/39117.shtml
英文地址,請注明出處:http://en.pswp.cn/news/39117.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【計算機視覺|生成對抗】用深度卷積生成對抗網絡進行無監督表示學習(DCGAN)

本系列博文為深度學習/計算機視覺論文筆記&#xff0c;轉載請注明出處 標題&#xff1a;Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks 鏈接&#xff1a;[1511.06434] Unsupervised Representation Learning with Deep Conv…

騰訊云CVM服務器競價實例是什么?和按量計費有什么區別?

騰訊云服務器CVM計費模式分為包年包月、按量計費和競價實例&#xff0c;什么是競價實例&#xff1f;競價實例和按量付費相類似&#xff0c;優勢是價格更劃算&#xff0c;缺點是云服務器實例有被自動釋放風險&#xff0c;騰訊云服務器網來詳細說下什么是競價實例&#xff1f;以及…

NLP——操作步驟講義與實踐鏈接

數據集與語料 語料是NLP的生命之源&#xff0c;所有NLP問題都是從語料中學到數據分布的規律語料的分類&#xff1a;單語料&#xff0c;平行語料&#xff0c;復雜結構 語料的例子&#xff1a;Penn Treebank, Daily Dialog, WMT-1x翻譯數據集&#xff0c;中文閑聊數據集&#xf…

大數據:Numpy基礎應用詳解

Numpy基礎應用 Numpy 是一個開源的 Python 科學計算庫&#xff0c;用于快速處理任意維度的數組。Numpy 支持常見的數組和矩陣操作&#xff0c;對于同樣的數值計算任務&#xff0c;使用 NumPy 不僅代碼要簡潔的多&#xff0c;而且 NumPy 的性能遠遠優于原生 Python&#xff0c;…

mysql-5.5.62-win32安裝與使用

1.為啥是這個版本而不是當前最新的8.0&#xff1f; 因為我要用32位。目前mysql支持win32的版本最新只到5.7.33。 首先&#xff0c;到官網MySQL :: MySQL Downloads 然后選 選一個自己喜歡的版本就好。我這里是如標題版本。下載32位的zip。然后回來解壓。 完了創建系統環境變…

項目實施方案案例模板-拿來即用

《項目實施方案》實際案例模板&#xff0c;拿來即用&#xff0c;原件可獲取。 項目背景 項目目標 項目范圍 項目總體計劃 項目組織架構 5.1. 項目職責分工 項目風險點 6.1. 項目風險分析 6.2. 項目實施關鍵點 項目管理規范 7.1. 項目實施約束 7.2. 項目變更凍結 7…

(三) CUDA 硬件實現

一組帶有on-chip 共享內存的SIMD多處理器 GPU可以被看作一組多處理器, 每個多處理器使用單一指令&#xff0c;多數據架構(SIMD)【單指令流多數據流】 在任何給定的時鐘周期內&#xff0c;多處理器的每個處理器執行同一指令&#xff0c;但操作不同的數據 每個多處理器使用以下…

HASH索引,AVL樹,B樹,B+樹的區別?

1. 什么是 Hash 1.1 Hash 函數 Hash 本身其實是一個函數&#xff0c;又被稱為散列函數&#xff0c;它可以大幅提高我們對數據的檢索效率。因為它是散列的&#xff0c;所以在存儲數據的時候&#xff0c;它也是無序的。 Hash 算法是通過某種確定性的算法(例如MD5&#xff0c;S…

virtualBox橋接模式下openEuler鏡像修改IP地址、openEule修改IP地址、openEule設置IP地址

安裝好openEuler后,設置遠程登入前,必不可少的一步,主機與虛擬機之間的通信要解決,下面給出詳細步驟: 第一步:檢查虛擬機適配器模式:橋接模式 第二步:登入虛擬機修改IP cd /etc/sysconfig/network-scripts vim ifcfg-enpgs3 沒有vim的安裝或者用vi代替:sudo dnf …

關于consul的下載方法

linux下 sudo yum install -y yum-utils sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo sudo yum -y install consulwindow下 https://developer.hashicorp.com/consul/downloads 然后把里面的exe文件放在gopath下就行了 驗證…

打造專屬花店展示小程序

在當今社會&#xff0c;微信小程序已經成為了各行各業拓展客戶資源的利器&#xff0c;而花店行業也不例外。通過打造一個獨特的花店小程序&#xff0c;你可以為你的花店帶來更多的曝光和客戶資源。那么&#xff0c;如何制作一個專屬的花店小程序呢&#xff1f;下面我們就來一步…

圖像像素梯度

梯度 在高數中&#xff0c;梯度是一個向量&#xff0c;是有方向有大小。假設一二元函數f(x,y)&#xff0c;在某點的梯度有&#xff1a; 結果為&#xff1a; 即方向導數。梯度的方向是函數變化最快的方向&#xff0c;沿著梯度的方向容易找到最大值。 圖像梯度 在一幅模糊圖…

電子商務類網站需要什么配置的服務器?

隨著電子商務的迅猛發展&#xff0c;越來越多的企業和創業者選擇在互聯網上開設自己的電商網站。為了確保電商網站能夠高效運行&#xff0c;給用戶提供良好的體驗&#xff0c;選擇合適的服務器配置至關重要。今天飛飛將和你分享電子商務類網站所需的服務器配置&#xff0c;希望…

【實際開發19】- 壓測 / 調優準備

目錄 1. Jmeter 2. Jmeter 環境部署 1. 配置 : 臨時修改語言 ~ Options → Choose Language → Chinese 3. Jmeter 并發測試 0. 提示 : Postman 測試是“串行”的 , 無法測試并發請求 1. daiding 1. Jmeter 下載 : Apache JMeter - Download Apache JMeter 詳參&#xf…

Mac下編譯32位Qt

不建議&#xff0c;MAC新版不支持32位程序&#xff01;&#xff01;&#xff01; Mac下編譯32位Qt 關于Mac10.11.4下編譯32bit Qt5.6.1的問題

【已解決】mac端 sourceTree 解決remote: HTTP Basic: Access denied報錯

又是在一次使用sourcetree拉取或者提交代碼時候&#xff0c;遇到了sourcetree報錯&#xff1b; 排查了一會&#xff0c;比如查看了SSH keys是否有問題、是否與sourcetree賬戶狀態有問題等等&#xff0c;最終才發現并解決問題 原因&#xff1a; 因為之前公司要求企業gitlab中…

【Java】異常處理 之 使用SLF4J 和 Logback

使用SLF4J和Logback 前面介紹了Commons Logging 和Log4j 這一對好基友&#xff0c;它們一個負責充當日志 API&#xff0c;一個負責實現日志底層&#xff0c;搭配使用非常便于開發。 有的童鞋可能還聽說過SLF4J和Logback。這兩個東東看上去也像日志&#xff0c;它們又是啥&…

JavaEE初階:多線程 - 編程

1.認識線程 我們在之前認識了什么是多進程&#xff0c;今天我們來了解線程。 一個線程就是一個 "執行流". 每個線程之間都可以按照順訊執行自己的代碼. 多個線程之間 "同時" 執行 著多份代碼. 引入進程這個概念&#xff0c;主要是為了解決并發編程這樣的…

編譯工具:CMake(三)| 最簡單的實例升級

編譯工具&#xff1a;CMake&#xff08;三&#xff09;| 最簡單的實例升級 前言過程語法解釋ADD_SUBDIRECTORY 指令 如何安裝目標文件的安裝普通文件的安裝&#xff1a;非目標文件的可執行程序安裝(比如腳本之類)目錄的安裝 修改 Helloworld 支持安裝測試 前言 本篇博客的任務…

utf-8和utf-8 mb4區別

UTF-8&#xff08;Unicode Transformation Format-8&#xff09;和UTF-8MB4&#xff08;UTF-8 Multibyte 4-byte&#xff09;是字符編碼方案&#xff0c;用于表示 Unicode 字符集中的字符。它們之間的主要區別在于編碼范圍。 UTF-8&#xff1a;UTF-8 是一種變長編碼方式&#x…