字串匹配問題(BF演算法、KMP演算法)
阿新 • • 發佈:2018-12-22
問題:
給定兩個字串S和T,在主串S中查詢子串T的過程稱為串匹配,T稱為模式。
BF演算法(樸素模式匹配):
BF演算法思想:
就是將目標串S的第一個字元與模式串T的第一個字元進行匹配,若相等,則繼續比較S的第二個字元和T的第二個字元;若不相等,則比較S的第二個字元和T的第一個字元,依次比較下去,直到得出最後的匹配結果。
程式碼實現:
int BF(char S[],char T[]) { int index=0; int i=0,j=0; while((S[i]!='\0')&&(T[j]!='\0')) { if(S[i]==T[j]) {i++,j++} else {index++;i=index;j=0;} //i和j分別回溯 } if(T[j]=='\0') return index+1; //返回本趟匹配的開始位置(不是下標) else return 0; }
演算法分析:
假設主串S長度為m,模式串T長度為n, 則最壞情況下的時間複雜度為O(m*n)。
例如:S=aaaaaaaaab,T=aaab。
KMP演算法: