1. 程式人生 > >字串匹配問題(BF演算法、KMP演算法)

字串匹配問題(BF演算法、KMP演算法)

問題:

給定兩個字串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演算法: