字串的模式匹配(BF演算法,KMP演算法)

2021-10-24 22:42:28 字數 1734 閱讀 3086

模式匹配含義:給定兩個字串,在主串s中查詢子串t的過程就稱為字串的模式匹配。

bf演算法:基本思想就是暴力匹配,將子串的第乙個字元與主串的第乙個字元進行比較,若相等,則比較第二個字元。若不相等,則與主串的第二個字元進行比較,以此類推,直到匹配到為止。

**如下

//返回模式串t在主串中從start開始的第一次匹配位數

public

intindexof

(seqstring t,

int start)

else}if

(j>t.

length()

)else

}return-1

;}

kmp演算法是一種改進的字串匹配演算法,主要實現方式是主串的x指標不回溯,修改y指標的指向,使其移動到有效的位置,從而大大提高了字串匹配效率。

next指標的作用:當x與y指標指向的字元不同時,讓y指標指向next[y]對應的位置即可。

next陣列儲存的就是已匹配過子串字首的「最長可匹配字首子串」和「最長可匹配字尾子串」的最長共有元素的長度。

獲取next陣列**

public

static

int[

]getnext

(string str)

//處理len何y指向模式串中字元不相等的情況

else

}return next;

}

kmp演算法**

public

static

intkmpsearch

(string str1,string str2)

else}if

(y==str2.

length()

)return-1

;}

獲取next陣列優化演算法**

public

static

int[

]getnext

(string str)

else

next[y]

=len;

}//處理len何y指向模式串中字元不相等的情況

else

}return next;

}

完整**如下

//實現kmp演算法

public

static

intkmpsearch

(string str1,string str2)

else}if

(y==str2.

length()

)return-1

;}//計算next陣列

public

static

int[

]getnext

(string str)

else

next[y]

=len;

}//處理len何y指向模式串中字元不相等的情況

else

}return next;

}

字串模式匹配(BF演算法和KMP演算法)

字串模式匹配 在主串s中尋找子串t,若主串第i個下標開始的字串同子串t完全相同,則返回下標i,若遍歷完主串s未找到匹配,則返回 1。bf brute force 演算法 bf演算法的思想就是將目標串s的第乙個字元與模式串t的第乙個字元進行匹配,若相等,則繼續比較s的第二個字元和 t的第二個字元 若不...

字串匹配演算法 BF及KMP

以 absababcef 與 abce 為例,求串2與串1匹配的第乙個位置的下標 這裡即輸出 5 一般的,我們可以從串1的起始位置開始與串2比較,若相同則兩串都向後移,否則,串1回到第二個位置,串2回到起始位置重新比較。本題用此方法會超時 includeint a 10001 b 10001 int...

字元字串模式匹配演算法 BF演算法與KMP演算法

需解決的問題 從主字串s中尋找子字串t出現的第乙個位置?如果出現,返回pos,否則,返回 1 一 bf演算法 bf演算法就是樸素模式匹配演算法,即暴力求解,迴圈遍歷。將子字串的每個字元和主字串的字元按順序比較,如果比較不相等時,兩個字串的索引i和j同時回退,i回退到剛才主字串起始位置的下一位,子字串...