1. 程式人生 > 實用技巧 >串——BF演算法(匹配子串)

串——BF演算法(匹配子串)

#include<iostream>
#include <cstring>
using namespace std;

#define MAXLEN 255

/* BF演算法,匹配子串 */

typedef struct{
    char ch[MAXLEN+1];
    int length;
}SString;

string StrAssign(SString &S,string e){
    strcpy(S.ch,e.c_str());
    S.length = e.length();
    for(int i=S.length;i>0
;i--){ S.ch[i] = S.ch[i-1]; } return "OK"; } int Index_BF(SString S,SString T){ //返回匹配成功的開始位置
int i,j ;
    i = j = 1;
    while(i <= S.length && j <= T.length ){
        if( S.ch[i] == T.ch[j] ) {++i;++j;}
        else
        {
            i = i-j+2;j=1;
        }
    }
    
if(j > T.length) return i-T.length; else return 0; } int main(){ SString S , T; StrAssign(S,"ababcabcacbab"); StrAssign(T,"abcac"); cout << Index_BF(S,T)<<endl; system("pause"); return 0; }

時間複雜度  (n為主串長度,m為子串長度)

最好情況:在子串第一個就匹配錯誤:O(n+m)

最壞情況:在子串最後一個才匹配錯誤:O(n*m)