字串匹配問題:假設存在原始的字串 abcabdfhfd 之後使用 r 表示,現提供另乙個匹配字串 abdf 之後使用 m 表示,請計算得出 m 字串在 r 字串中的位置;
問題分析:按照常規的思維,要計算兩個字串的匹配關係,需要使用較短的匹配字串逐項對比原始字串,如果發現有字串不匹配則回到初始位置的後一位進行再次出現匹配,直到找到為止,如下所示。使用這種方式得出的演算法又被稱之為樸素的字串匹配演算法,因為隨機性較大,而且是逐項匹配,演算法的時間複雜度o[m*n]:
**實現:樸素的字串匹配的演算法實現/**
* 樸素的字串匹配演算法實現,使用逐項對比的邏輯,
* 並考慮**健壯性加入
* 原始字串和匹配字串的長度判斷,
* 原始字串剩餘量和匹配字串長度判斷,
** 雙層for迴圈,本例中沒辦法得出準確的時間複雜度計算公式,
* 但根據時間複雜度計算原則可推出,演算法的時間複雜度為o[m*n]
** 引數: resourcestr 表示原始的字串r;
* matchstr 表示匹配的字串m;
** */
public static void generatematchstr(string resourcestr, string matchstr )
int countresource = i;
for(int j = 0; j < matchstrlen; j++, countresource++)
if(j == matchstrlen-1)}}
}}
結果分析:分別測試不同情況的字串匹配所得的結果,可以看出該演算法可以計算得出字串的匹配位置;
如有任何問題,歡迎指正討論,謝謝!
樸素字串匹配演算法
include include include define maxsize 40 define ok 1 define error 0 using namespace std typedef char string maxsize 1 int string assign string m,char...
演算法 樸素字串匹配
模式匹配是資料結構中字串的一種基本運算,給定乙個子串,要求在某個字串中找出與該子串相同的所有子串,這就是模式匹配。假設p是給定的子串,t是待查詢的字串,要求從t中找出與p相同的所有子串,這個問題成為模式匹配問題。p稱為模式,t稱為目標。如果t中存在乙個或多個模式為p的子串,就給出該子串在t中的位置,...
字串暴力匹配演算法
暴力匹配演算法 如果用暴力匹配的思路,並假設現在 str1 匹配到 i位置,子串 str2 匹配到 j 位置,則有 1 如果當前字元匹配成功 即 str1 i str2 j 則i j 繼續匹配下乙個字元 2 如果失配 即 str1 i str2 j 令i i j 1 j 0 相當於每次匹配失敗時,i...