串的BF算法(樸素查找算法)

串的模式匹配:在主串str的pos位置查找子串sub,找到返回下標,沒有找到返回-1。

1.BF算法思想

相等則繼續比較,不相等則回退;回退是i退到剛才位置的下一個(i-j+1);j退到0;利用子串是否遍歷完成,來判斷是否查找成功;(注意:不能利用主串來判斷)


2.代碼實現

int BF(const char* str, const char* sub, int pos)
{assert(str != NULL && sub != NULL);if (str==NULL||sub==NULL||pos<0 || pos>strlen(str))return -1;int i = pos;int j = 0;int lenstr = strlen(str);int lensub = strlen(sub);//while (str[i] != '\0' && sub[j] != '\0')while(i < lenstr&&j < lensub){if (str[i] == sub[j]){i++;j++;}else{i = i - j + 1;//剛才位置的下一個j = 0;}}//判斷是否查找成功,利用子串是否遍歷完成,來判斷是否查找成功//if (sub[j] == '\0')if(j>=lensub)return i - j;elsereturn -1;
}	int main()
{const char* str1 = "ababcabcdabcde";const char* str2 = "abcd";printf("%d\n", BF(str1, str2, 0));printf("%d\n", BF(str1, str2, 6));const char* str3 = "aaaaab";const char* str4 = "aaaab";printf("%d\n", BF(str3, str4, 0));printf("%d\n", BF(str3, str4, -1));printf("%d\n", BF(str3, str4,8));const char* str5 = "abcd";const char* str6 = "ae";printf("%d\n", BF(str5, str6, 0));return 0;
}

注:此算法時間復雜度為O(n*m)

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

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

相關文章

Python matplotlib

目錄 1、安裝 matplotlib 2、繪制折線圖 修改標簽文字和線條粗細 校正圖形 3、繪制散點圖 繪制單點 繪制一系列點 自動計算數據 刪除數據點的輪廓 自定義顏色 使用顏色映射 自動保存圖表 4、隨機漫步 創建 RandomWalk() 類 選擇方向 繪制隨機漫步圖 給點著色 …

最簡單的ubuntu遠程桌面方法

最簡單的ubuntu遠程桌面方法 部署環境&#xff1a;Ubuntu 20.04 LTS 現在最常用的遠程控制Linux系統的方法是通過XRDP、VNC等&#xff0c;但是安裝配置過程繁瑣復雜&#xff0c;經常出現各種問題導致連接失敗&#xff0c;另外一方面延遲較高&#xff0c;操作卡頓。 經過我堅…

【Java項目介紹和界面搭建】拼圖小游戲——鍵盤、鼠標事件

&#x1f36c; 博主介紹&#x1f468;?&#x1f393; 博主介紹&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高興認識大家~ ?主攻領域&#xff1a;【滲透領域】【應急響應】 【Java】 【VulnHub靶場復現】【面試分析】 &#x1f389;點贊?評論?收藏 …

DDS數據分發服務——提升汽車領域數據傳輸效率

1.引言 隨著智能化技術的快速發展&#xff0c;汽車行業正經歷著一場革命性的變革。如今的分布式系統變得越來越復雜且龐大&#xff0c;對網絡通信基數要求在功能和性能層面越來越高。數據分發服務&#xff08;DDS&#xff09;作為一項先進的數據傳輸解決方案&#xff0c;在汽車…

2369. 檢查數組是否存在有效劃分(動態規劃)

2024-3-1 文章目錄 [2369. 檢查數組是否存在有效劃分](https://leetcode.cn/problems/check-if-there-is-a-valid-partition-for-the-array/)思路&#xff1a;代碼&#xff1a; 2369. 檢查數組是否存在有效劃分 思路&#xff1a; 1.狀態定義:f[i]代表考慮將[0,i]是否能被有效劃…

電腦要用多少V的電源?電腦電源輸入電壓是市電

臺式電源的輸出電壓是多少&#xff1f; 電腦電源輸出一般有三種不同的電壓&#xff0c;分別是&#xff1a; 12V、5V、3.3V。 電腦電源負責給電腦配件供電&#xff0c;如CPU、主板、內存條、硬盤、顯卡等&#xff0c;是電腦的重要組成部分。 工作電流根據不同的硬件及其使用狀…

LeetCode15:三數之和

題目描述 給你一個整數數組 nums &#xff0c;判斷是否存在三元組 [nums[i], nums[j], nums[k]] 滿足 i ! j、i ! k 且 j ! k &#xff0c;同時還滿足 nums[i] nums[j] nums[k] 0 。請 你返回所有和為 0 且不重復的三元組。 注意&#xff1a;答案中不可以包含重復的三元組…

【48天筆試強訓】day04

計算糖果 描述 A,B,C三個人是好朋友,每個人手里都有一些糖果,我們不知道他們每個人手上具體有多少個糖果,但是我們知道以下的信息&#xff1a; A - B, B - C, A B, B C. 這四個數值.每個字母代表每個人所擁有的糖果數. 現在需要通過這四個數值計算出每個人手里有多少個糖果…

編程語言:SQL Server數據庫使用教程,SQL Server增刪改查語句

「作者主頁」&#xff1a;士別三日wyx 「作者簡介」&#xff1a;CSDN top100、阿里云博客專家、華為云享專家、網絡安全領域優質創作者 「推薦專欄」&#xff1a;對網絡安全感興趣的小伙伴可以關注專欄《網絡安全自學教程》 SQL Server是微軟提供的一種關系型數據庫&#xff0c…

Python算法100例-3.3 阿姆斯特朗數

完整源代碼項目地址&#xff0c;關注博主私信源代碼后可獲取 1.問題描述2.問題分析3.算法設計4.確定程序框架5.完整的程序6.問題拓展 1&#xff0e;問題描述 如果一個整數等于其各個數字的立方和&#xff0c;則該數稱為“阿姆斯特朗數”&#xff08;亦稱為自戀性數&#xff…

nacos開啟鑒權+springboot配置用戶名密碼

nacos默認沒有開啟鑒權&#xff0c;springboot無需用戶名密碼即可連接nacos。從2.2.2版本開始&#xff0c;默認控制臺也無需登錄直接可進行操作。 因此本文記錄一下如何開啟鑒權&#xff0c;基于nacos2.3.0版本。 編輯nacos服務端的application.properties&#xff1a; # 開…

Linux/Docker 修改系統時區

目錄 1. Linux 系統1.1 通過 timedatectl 命令操作1.2 直接修改 /etc/localtime 文件 2. Docker 容器中的 Linux 操作環境&#xff1a; CentOS / AlmaOSMySQL Docker 鏡像 1. Linux 系統 1.1 通過 timedatectl 命令操作 使用 timedatectl list-timezones 命令列出可用的時區…

uniapp 地圖行車軌跡

文章目錄 uniapp 地圖行車軌跡1、畫地圖2、切換地圖中心點3、畫路線4、軌跡移動5、標記點及自定義內容 uniapp 地圖行車軌跡 官網地圖組件&#xff1a;https://uniapp.dcloud.net.cn/component/map.html 官網地圖組件控制&#xff1a;https://uniapp.dcloud.net.cn/api/locati…

【Java數據結構 -- 二叉樹的基本操作】

二叉樹的基本操作 1.獲取樹中節點的個數1.1 計數器遞歸的思路1.2 子問題思路&#xff1a; 2. 獲取葉子個數3. 獲取第k層節點的個數4.獲取二叉樹的高度5.檢測值為value的元素是否存在 1.獲取樹中節點的個數 思路&#xff1a;整棵樹的節點個數 左子樹的節點個數&#xff0b;右子…

休息日的思考與額外題——雙指針、原地哈希day28

文章目錄 前言一、11. 盛最多水的容器二、41. 缺失的第一個正數三、42. 接雨水總結 前言 一個本碩雙非的小菜雞&#xff0c;備戰24年秋招&#xff0c;計劃二刷完卡子哥的刷題計劃&#xff0c;加油&#xff01; 二刷決定精刷了&#xff0c;于是參加了卡子哥的刷題班&#xff0c…

32單片機基礎:旋轉編碼器計次

接線圖如上圖所示。 我們初始化一下PB0和PB1兩個GPIO口外設中斷&#xff0c;當然&#xff0c;這里只初始化一個外部中斷也能完成功能的對于編碼器而言&#xff0c;下圖所示為正轉的波形。如果把一相的下降沿用作觸發中斷&#xff0c;在中斷時刻讀取另一相的電平&#xff0c;正…

【EXCEL】SUMIFS多次條件篩選數據

問題案例 有如下兩個工作表&#xff08;Sheet1和Sheet2&#xff09;&#xff1a; 在sheet1中的C2行獲得一個結果&#xff08;項目1的1月收入&#xff09;&#xff0c;是對sheet2中的A列篩選出“項目1”B列篩選出“202401”而獲得對應C列的結果。借助excel的公式如何實現。 S…

【算法科目】2024年第二屆全國大學生信息技術認證挑戰賽 題解

圖像壓縮 曾經看到過&#xff0c;這是一道洛谷原題&#xff0c;很可惜我沒做過&#xff0c;有點看不懂就沒嘗試。 原題鏈接&#xff1a;B3851 [GESP202306 四級] 圖像壓縮 - 洛谷 | 計算機科學教育新生態 (luogu.com.cn) 因數分解 直接枚舉就行了&#xff0c;從2開始找因子&a…

Spring:EnclosingClass工具類分辨

Spring&#xff1a;EnclosingClass工具類分辨 1 前言 通過Spring的工具分辨EnclosingClass類。 測試類如下&#xff1a; package com.xiaoxu.test.enclosingClass;/*** author xiaoxu* date 2024-01-18* java_demo2:com.xiaoxu.test.enclosingClass.Outter*/ public class …

微信小程序(四十六)登入界面-進階版

注釋很詳細&#xff0c;直接上代碼 上一篇 此文使用了vant組件庫&#xff0c;沒有安裝配置的可以參考此篇vant組件的安裝與配置 新增內容&#xff1a; 1.手機號與驗證碼格式驗證 2.驗證碼的網絡申請和校驗 wechat-http模塊在好幾篇以前已經講了咋安裝的&#xff0c;不記得的友…