串——BF演算法(匹配子串)
阿新 • • 發佈:2020-11-21
#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)