模式匹配含義:給定兩個字串,在主串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回退到剛才主字串起始位置的下一位,子字串...