【字符串匹配算法——BF算法】

](https://img-home.csdnimg.cn/images/20220524100510.png#pic_center)

🌈個人主頁: Aileen_0v0
🔥熱門專欄: 華為鴻蒙系統學習|計算機網絡|數據結構與算法
?💫個人格言:“沒有羅馬,那就自己創造羅馬~”

文章目錄

    • `BF算法`
    • 介紹及過程演示
    • 代碼實現過程
    • 下節預告
    • `KMP算法`
      • 利用next數組存儲子串中j回退的位置(k),每一個回退位置(k)需要手動求得。

BF算法

介紹及過程演示

  • 字符串的暴力法(Brute Force Method)是一種用于字符串匹配的簡單算法,也稱為“樸素匹配算法”。它的核心思想是從目標字符串中逐個字符進行比對,直到找到一個匹配或遍歷完目標字符串為止。
  • 查找過程如下所示:
    在這里插入圖片描述
    • 上面第一行的是主串,第二行的是子串,我們要從主串中找到子串,找到后返回對應主串開始與子串進行匹配的位置的下標。
    • ①當主串和子串匹配時他們對應的下標分別進行加加。
    • ②當主串和子串不匹配時,主串回到原來查找的位置下標+1處,子串回到起始位置0處。
    • ③當主串遍歷完時,說明找不到子串的字符。
    • ④當子串遍歷完時,說明在主串中找到了對應的子串。

代碼實現過程

  • 對應算法的代碼實現:
public class BF {// 實現暴力法字符串匹配的函數public static int myBF(String str, String sub) {// 獲取主字符串和子字符串的長度int strlen = str.length();int sublen = sub.length();// 邊界條件:如果主字符串或子字符串為null,或者它們的長度為0,直接返回-1,表示無效輸入if (str == null || sub == null || strlen == 0 || sublen == 0) {return -1;}// 遍歷主字符串中的每個字符// i表示主字符串的位置,j表示子字符串的位置for (int i = 0, j = 0; i < strlen && j < sublen;) {// 如果當前主字符串和子字符串的字符相等if (str.charAt(i) == sub.charAt(j)) {i++;  // 主字符串位置前進j++;  // 子字符串位置前進// 如果子字符串的所有字符都匹配完畢,返回匹配的起始位置if (j == sublen) {return i - j;  // 計算起始位置,i - j 是主字符串匹配到的位置}} else {// 如果字符不匹配,重新從主字符串的下一個字符開始匹配i = i - j + 1;  // i回退到下一次匹配的起始位置j = 0;          // 子字符串重置為從頭開始匹配}}// 如果遍歷完主字符串后仍未找到匹配,返回-1return -1;}public static void main(String[] args) {// 調用myBF函數查找"abcd"在"ababcabcdabcde"中的起始位置int result = myBF("ababcabcdabcde", "abcd");// 輸出結果:如果result不等于-1,表示找到匹配,否則表示未找到if (result != -1) {System.out.println("找到了,其匹配的起始位置是:" + result);} else {System.out.println("沒找到");}}
}

因為char是一個基本數據類型,所以只能用==進行值相等的比較,這就是今天通過BF算法進行字符串比較的內容,讓我們下期再見~

下節預告

KMP算法

利用next數組存儲子串中j回退的位置(k),每一個回退位置(k)需要手動求得。

  • k的求解:
    • 1.子串中j回退的位置K,是從0下標開始一直找到以j-1下標字符結尾的字符中兩個相等的真子串(不包含本身),eg:下圖中j=5時與主串i=5時對應下標的字符不一致,此時我們就可以通過找到從0開始到j-1范圍里面子串中與主串比較匹配的兩個子串來確定j=5時,應該回退到前面兩個匹配的真子串對應長度的值即j應該回退到k=2的這個位置。next [5] = 2(k值)。若從0下標開始到j-1下標找不到兩個匹配的字符串那么就說明k為0。

](https://img-home.csdnimg.cn/images/20220524100510.png#pic_center)
](https://img-home.csdnimg.cn/images/20220524100510.png#pic_center)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/63351.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/63351.shtml
英文地址,請注明出處:http://en.pswp.cn/web/63351.shtml

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

相關文章

Linux 文件系統目錄結構及其簡要介紹

Hello! 親愛的小伙伴們&#xff0c;大家好呀&#xff08;Smile~&#xff09;&#xff01;我是 H u a z z i Huazzi Huazzi&#xff0c;歡迎觀看本篇博客&#xff0c;接下來讓我們一起來學習一下Linux 文件系統目錄結構吧&#xff01;祝你有所收獲&#xff01; 本篇博客的目錄&a…

小米準備入局Nas?Nas究竟是啥?能干啥?

一開頭就來了個三連問&#xff1a;小米準備入局Nas&#xff1f;Nas究竟是啥&#xff1f;Nas能干啥&#xff1f; 好像這段時間Nas這個詞頻頻出現&#xff0c;但很多小伙伴都不知道這個是什么設備。首先咱們來解決一下名詞Nas是什么意思。 什么是Nas&#xff1f; 為了盡可能解釋…

基于Socket實現客戶端和服務端的Tcp通信(C#)

0.前言 使用C#和Unity實現復刻Liar’s bar中的功能 軟件開發大作業 本系列文章用于記錄與分享開發過程中使用到的知識點&#xff0c;以及常見錯誤 本文主要描述有關網絡編程的內容 目錄 0.前言1.使用Socket搭建Server1.1Server端的Socket連接1.2 Server端接收Client的信息1.3…

【mysql】如何查看大表記錄行數

目錄 1. 使用 ANALYZE TABLE 和 SHOW TABLE STATUS2. 查詢 INFORMATION_SCHEMA 表3. 使用索引統計信息4. 維護行數緩存5. 使用分區計數 1. 使用 ANALYZE TABLE 和 SHOW TABLE STATUS 1.ANALYZE TABLE 可以更新表的統計信息&#xff0c;然后使用 SHOW TABLE STATUS 來查看估算的…

文件斷點續傳(視頻播放,大文件下載)

客戶端每次請求取大文件部分數據。 瀏覽器播放mp4視頻時&#xff0c;會首先傳Range消息頭&#xff0c;檢測到206狀態碼&#xff0c;和Content-Range&#xff0c;Accept-Ranges 會自動請求余下數據。后端需要在文件任意偏移量取數據。 參考&#xff1a; springboot項目實現斷…

游戲AI實現-尋路算法(A*)

A*&#xff08;A-star&#xff09;是一種圖遍歷和尋路算法&#xff0c;由于其完整性、最優性和最佳效率&#xff0c;它被用于計算機科學的許多領域。給定一個加權圖、一個源節點和一個目標節點&#xff0c;該算法將找到從源到目標的最短路徑&#xff08;相對于給定的權重&#…

any/all 子查詢優化規則的原理與解析 | OceanBase查詢優化

背景 在通常情況下&#xff0c;當遇到包含any/all子查詢的語句時&#xff0c;往往需要遵循嵌套執行的方式&#xff0c;因此其查詢效率較低。Oceanbase中制定了相應的any/all子查詢優化規則&#xff0c;能夠能夠識別并優化符合條件的any/all子查詢&#xff0c;從而有效提升查詢…

[HNOI2002] 營業額統計 STL - set集合

文章目錄 [HNOI2002] 營業額統計題目描述樣例輸入 #1樣例輸出 #1 提示題解相關知識點set [HNOI2002] 營業額統計 STL - set解題 題目描述 Tiger 最近被公司升任為營業部經理&#xff0c;他上任后接受公司交給的第一項任務便是統計并分析公司成立以來的營業情況。 Tiger 拿出…

汽車供應鏈 “劇變”開始,“智能感知潛在龍頭”誕生

智能汽車產業鏈“劇變”已經開啟&#xff0c;智能感知軟硬件能力的權重正在不斷被放大。 比如滿足高階泊車的第二代AK2超聲波傳感器、滿足人機共駕場景需求的電子外后視鏡&#xff08;CMS&#xff09;、iTOF 3D成像視覺感知&#xff08;用于艙內監控&#xff09;等新產品&…

Latex中表格添加底部文本注釋并調整對齊

如何實現從第一個表到第三個表的轉換&#xff0c; 其中主要涉及到兩點&#xff1a; &#xff08;1&#xff09;底部腳注與表格自動對齊并縮進換行 &#xff08;2&#xff09;表格自適應頁面寬度 底部腳注的對齊與換行縮進需要用到 \usepackage{threeparttable} \usepackage{…

SQL 查詢方式比較:子查詢與自連接

在 SQL 中&#xff0c;子查詢和自連接是兩種常見的查詢方式&#xff0c;它們的功能雖然可以相同&#xff0c;但實現的方式不同。本文通過具體示例&#xff0c;深入探討這兩種查詢方式&#xff0c;并配合數據展示&#xff0c;幫助大家理解它們的使用場景和差異。 數據示例 假設…

html基礎-認識html

1.什么是html html是瀏覽器可以識別的的標記語言&#xff0c;我們在瀏覽器瀏覽的網頁就是一個個的html文檔 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>認識html</title> </head> <body><h1…

linux 無網絡安裝mysql

下載地址 通過網盤分享的文件&#xff1a;mysql-5.7.33-linux-glibc2.12-x86_64.tar.gz 鏈接: https://pan.baidu.com/s/1qm48pNfGYMqBGfoqT3hxPw?pwd0012 提取碼: 0012 安裝 解壓 tar -zxvf mysql-5.7.33-linux-glibc2.12-x86_64.tar.gz mv /usr/mysql-5.7.33-linux-glibc2.1…

利用高德API獲取整個城市的公交路線并可視化(七)

本篇文章是對我們從高德拿到的公交/地鐵的json文件的精細化處理的一個深入解析&#xff0c;通過對這些原始數據進行詳細的清洗、轉換和分析&#xff0c;我們通過對數據的質量和可用性的提升&#xff0c;來為后續的數據精細化處理和研究做基礎數據的支撐&#xff0c;從而為后續的…

OGV格式如何轉換成MP4格式?五款視頻格式轉換工具

在數字時代&#xff0c;視頻已成為我們日常生活、工作和學習中不可或缺的一部分。而不同的設備和平臺往往支持不同的視頻格式&#xff0c;這就需要對視頻進行格式轉換。 OGV&#xff08;Ogg Video File&#xff09;是一種使用OGG開源格式的容器&#xff0c;用于存儲帶或不帶音頻…

番外篇 | Hyper-YOLO:超圖計算與YOLO架構相結合成為目標檢測新的SOTA !

前言:Hello大家好,我是小哥談。Hyper-YOLO,該方法融合了超圖計算以捕捉視覺特征之間復雜的高階關聯。傳統的YOLO模型雖然功能強大,但其頸部設計存在局限性,限制了跨層特征的融合以及高階特征關系的利用。Hyper-YOLO在骨干和頸部的聯合增強下,成為一個突破性的架構。在COC…

C語言小練習-打印字母倒三角

編寫一個程序&#xff0c;在用戶輸入某個大寫字母后&#xff0c;產生一個金字塔圖案。 #include <stdio.h>int main(int argc,char *argv[]) {char ch; loop:printf("請輸入大寫字母&#xff01;\n");scanf("%c",&ch);getchar();if(ch < A ||…

FutureCompletableFuture實戰

1. Callable&Future&FutureTask介紹 直接繼承Thread或者實現Runnable接口都可以創建線程&#xff0c;但是這兩種方法都有一個問題就是&#xff1a;沒有返回值&#xff0c;也就是不能獲取執行完的結果。因此java1.5就提供了Callable接口來實現這一場景&#xff0c;而Fu…

什么是MyBatis

MyBatis是一款優秀的持久層框架&#xff0c;它支持定制化SQL、存儲過程以及高級映射。以下是關于MyBatis的詳細介紹&#xff1a; 一、MyBatis的起源與發展 MyBatis本是Apache的一個開源項目iBATIS&#xff0c;2010年這個項目由Apache遷移到了Google Code&#xff0c;并且改名…

阿爾茨海默癥數據集,使用yolo,voc,coco格式對2013張原始圖片進行標注,可識別輕微,中等和正常的癥狀

阿爾茨海默癥數據集,使用yolo&#xff0c;voc&#xff0c;coco格式對2013張原始圖片進行標注&#xff0c;可識別輕微&#xff0c;中等&#xff0c;嚴重和正常的癥狀 數據集分割 訓練組100&#xff05; 2013圖片 有效集&#xff05; 0圖片 測試集&#xf…